FOREIGN KEY не устанавливается

Safary

Новичок
в PHP просто пишу:
PHP:
<?
require('include/config.php');
$sql['connect']=@mysql_connect($sql['host'],$sql['user'],$sql['pass']) or die('ошибка: невозможно подключение к БД');

$query="CREATE DATABASE `scms`";
mysql_query($query);
mysql_select_db('scms');

$query="CREATE TABLE `structure` (
`id` int(7) auto_increment,
`pid` int(7),
`sort` varchar(255) default '0',
`level` int(2) default '1',
`link` varchar(255),
`type` varchar(1) default '1',
`section` varchar(255),
`name` varchar(255),
PRIMARY KEY  (`id`),
UNIQUE KEY `id` (`id`),
FOREIGN KEY (pid) REFERENCES structure(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

CREATE TABLE `pages` (
`id` int(7) auto_increment,
`pid` int(7),
`title` varchar(255),
`description` varchar(255),
`text` text,
PRIMARY KEY  (`id`),
UNIQUE KEY `id` (`id`),
FOREIGN KEY (pid) REFERENCES structure(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

INSERT INTO `structure` ( `id` , `pid` , `sort` , `level` , `link` , `type` , `section` , `name` )
VALUES (
'', NULL , '0', '1', NULL , '1', NULL , 'главная страница'
), (
'', NULL , '0', '1', NULL , '1', NULL , 'ошибка 404'
)";
mysql_query($query);
?>
 

findnext

Новичок
Safary
есть такая функция как mysql_error(), она говорит программисту почему нельзя выполнить запрос
 

Grezz

Новичок
Автор оригинала: Safary
Ещё уникальный на ID и первичный тоже на ID. Всё как надо )
ИМХО: первичный + уникальный ключ на одно и то же поле не надо. Первичный ключ уже включает понятие "уникальный"
 

Safary

Новичок
CHEM_Eugene, ага, денвер. ИнноДБ уже включил )))
pilot911, а 3 как выполнить? :)
findnext, спасибо.
Grezz, хм... спасибо. а уникальный по идее для чего? если почти в каждую таблицу обязателен первичный, где уникальный обычно ставят? id - первичный, pid - внешний, а уникальный по идее можно на name ставить, если нэйм уникальный?

-~{}~ 03.04.09 01:22:

Так вы мне всётаки скажите, как выполнять несколько запросов одновременно?
Или это невозможно?

Вот так делать мне не оч нравится:
PHP:
$query=("SELECT....");
mysql_query($query);
$query=("SELECT....");
mysql_query($query);
$query=("SELECT....");
mysql_query($query);
 

dimagolov

Новичок
Safary, вот чего ты уперся в исполнение нескольких запросов? чтобы усложнить себе обработку ошибок? исполняй по одному и проверяй результат и ошибки для каждого.
 

pilot911

Новичок
можешь использовать другую функцию

http://www.google.ru/search?q=mysql_query+multiply+queries



PHP:
mysqli_multi_query($connection, "UPDATE t1 SET a=1 WHERE id=4;UPDATE t2 SET a=1 WHERE id=5");
 

Safary

Новичок
во! :)
pilot911, спасибо! Похоже что ты единственный человек на этом форуме, который про эту функцию знал

-~{}~ 03.04.09 08:14:

Ещё вот какую вещь хочу спросить...
Вот представим как устроен mp3-портал...
У меня просто в одной таблице все категории хранятся.
а если например там группы надо делать, если в одной категории хранить - то очень медленно будет, заходя на такой адресс:
site.ru/mp3/metallica/

Если в одной таблице пара миллионов групп будет - то очень медленно всё будет, в таком случае делают несколько таблиц...
А вот если упорядочить группы по NAME, то будет резко искаться? Тоесть если MySQL знает что всё упорядочено от a до я и если набрали группу metallica, он ищет сразу всё что начинается с буквы m ?
 

Grezz

Новичок
Автор оригинала: Safary
Grezz, хм... спасибо. а уникальный по идее для чего? если почти в каждую таблицу обязателен первичный...
В каждой таблице обязателен первичный ключ, иначе будет каша.

где уникальный обычно ставят? id - первичный, pid - внешний, а уникальный по идее можно на name ставить, если нэйм уникальный?
Именно так, уникальный ставят на уникальные поля.

Если в одной таблице пара миллионов групп будет - то очень медленно всё будет, в таком случае делают несколько таблиц...
И получают черте-что и сбоку бантик. RTFM про индексы ;) и тогда не будет возникать вопросов типа:

А вот если упорядочить группы по NAME, то будет резко искаться? Тоесть если MySQL знает что всё упорядочено от a до я и если набрали группу metallica, он ищет сразу всё что начинается с буквы m ?
[offtop]я бы не стал делать БД с таблицами в пару миллионов записей на MySQL[/offtop]
 

pilot911

Новичок
[offtop]я бы не стал делать БД с таблицами в пару миллионов записей на MySQL[/offtop]



это ты зря, 2 млн - скушает незаметно
 

Safary

Новичок
Автор оригинала: Grezz
В каждой таблице обязателен первичный ключ, иначе будет каша.
а я и не говорил что не обязателен, я наоборот говорил что обязателен )

И получают черте-что и сбоку бантик. RTFM про индексы ;) и тогда не будет возникать вопросов типа:
да я знаю про индексы...
просто интереснее такой путь - site.ru/mp3/metallica/death_magnetic/my_apocalypse, чем
site.ru/mp3/404/9/5

Если бы MySQL умел бы искать не только по числовому сортированному индексу, а ещё и по буквенному сортированному полю - то проблем бы не было. было бы немножко медленнее, чем по числовому.

[offtop]я бы не стал делать БД с таблицами в пару миллионов записей на MySQL[/offtop]
а на чем их предложишь делать?
mp3-порталы же вроде на мускуле делают, нет?

-~{}~ 03.04.09 10:49:

pilot911, а на каком миллионе начнет тормозить? Очень интересно.. Даже тесты захотелось провести, но лень )
Раз незаметно скушает - может там всётаки по сортированному буквенному полю ищется? Не дураки же разработчики мускула думаю, такую оптимизацию сделали наверное, наврятли перед тем как найти поле на букву Я в таблице, где миллиарды записей мускул всю базу будет обходить.

Ещё, кто знает про работу мускула, расскажите.... Мне очень интересно понять как он ищет. Только ссылки не кидайте, читать миллионы букв не хочется, а вот в кратце услышать как он ищет очень полезно мне будет! Да и всем остальным.
по индексу числовому - он тоже по сортированному лучше ищет? Тоесть таблица с индексами от 1 до 500, если попробывать найти запись 350, мускул сразу на 350 же перепрыгнуть попытается, без обхода остальных записей?
 

Фанат

oncle terrible
Команда форума
на редкость дебильная тема.
опять спецы набежали, которые ребенку плохого насоветовали.
при том, что ребенок даже куличики в песочнице - и то с трудом конструирует.

Safary
Во-первых, никогда не пиши ни одного слова в чужие темы. Ты даже читать их не дорос.

По поводу твоих затруднений.
Я уже упустил, среди твоих многочисленных вопросов, для решения какой задачи очередной доброхот посоветовал тебе внешний ключ. Рассказывай.

про индексы. объясняй, какая связь между путем на сайте и индексами в базе. кроме тебя это ни для кого проблему не составляет.

pilot911, исчез из этой темы.

-~{}~ 03.04.09 10:54:

да я знаю про индексы...
кто знает про работу мускула, расскажите....
дебил
 

pilot911

Новичок
Ф*нат, пора тебя разжаловать в солдаты... где тут отдел кадров и прокуратура ?
 

Safary

Новичок
Фонат, ты почему таблетки не пьешь, которые тебе нервопатолог прописал?

-~{}~ 03.04.09 11:04:

А кстати что я в темах отвечал не по делу? Отвечал вроде только по тому, что знаю.

Между путем на сайте и индексами связь такая - по путю на сайте нужно найти значение в базе и вывести информацию.

P.S. сейчас наверняка тему закроют.
 

Фанат

oncle terrible
Команда форума
Отвечал вроде только по тому, что знаю.
ты вообще ничего не знаешь. даже меньше, чем ничего

какие проблемы у тебя с поиском и выводом? конкретно.
 

Safary

Новичок
*****, Ну с поиском - то что тормозить будет, если искать по имени, а не по индексу, а как индекс, без имени узнать...
http://site.ru/mp3/metallica
К примеру если ссылка такая, тоесть правильный ЧПУ - то искать же надо будет по имени - metallica... А там миллионы групп....

Смотрел как на других сайтах сделано, к примеру:
http://musicmp3.spb.ru/genres/344/grunge.htm
и название стиля указано и индекс этого стиля.
Можно и так сделать, но в идеале без мусора вообще делать, а индекс - мусор, который пользователю видеть незачем :)

P.S. ты на меня не обижайся, понимаю что ты профи и тебя бесят начинающие разработчики с тупыми вопросами.
 

Фанат

oncle terrible
Команда форума
На тебя я не обижаюсь. Меня раздражают доброхоты, которые лезут со своими советами, не поняв вопроса.

Итак. Понятно. Ты думаешь, что индекс - это синоним поля id.
На самом деле индекс можно поставить и на другие поля. И на текстовое в том числе.
Твои проблемы разрешились?

-~{}~ 03.04.09 11:31:

впрочем, вот это
Только ссылки не кидайте, читать миллионы букв не хочется,
не то чтобы раздражает... но если еще раз увижу, то вот тогда уже обижусь.

читай
http://www.host.ru/support/articles/mysql-optimization.html
 
Сверху