Автор оригинала: motobyba
JOIN - для меня "темный лес", буду изучать, что к чему.
-~{}~ 28.04.10 19:45:
вычитал что важно правельно связать таблицы перед использованием JOIN. и тут яв не понятках, у меня 3 таблицы в БД, в первой "streets"такие поля (id, streets) в telbook поля такие (id, number, surname, io, street, house, town) и в towns(id, towns).
нужно сделать индексными поля таблици telbook все кроме id, io, house? а в таблице с улицами и городами сделать индексными все поля?
Если бы я делал то, что ты хочешь написать то я бы предложил такую структуру:
streets - переименовываем поле streets > streetname
CREATE TABLE `streets` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`streetname` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
towns - переименовываем поле towns > townname
CREATE TABLE `towns` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`townname` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
telbook - переименовываем в phonebook, Что есть io поле я не понял. Поля соответственно я переименовал street > street_id, town > town_id, number > phone,
CREATE TABLE `phonebook` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`phone` VARCHAR( 20 ) NOT NULL ,
`io` VARCHAR( 50 ) NOT NULL ,
`surname` VARCHAR( 20 ) NOT NULL ,
`street_id` INT( 11 ) NOT NULL ,
`house` INT( 5 ) NOT NULL ,
`town_id` INT( 11 ) NOT NULL ,
INDEX ( `street_id` , `house` , `town_id` )
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
Переименования я сделал потому, что иначе хрен поймешь что это у тебя там лежит, и почему поле называется во множественном числе?.. Ну ты понял в общем.
Далее, если ты не умеешь читать дампы, что я привел выше, то на перво таблице индексным полем будет id как и на второй таблице. А на третьей будет id, street_id, town_id, house.
Однако по большому счету индексы не важны в данном случае для работоспособности связывания таблиц, однако они очень сильно ускоряют выборки при правильных запросах.
Теперь тебе нужно связать таблицы:
streets.id = phonebook.street_id && towns.id = phonebook.town_id
Что конкретно непонятно, я распишу дальше?