| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Связянные таблицы |
| Автор: Raiser 28.7.2006, 09:19 |
| Здравствуйте, хочу разобраться со связанными таблицами. У меня есть несколько таблиц: Таблица maininf | id | name | link | description | | 1 | some | ht. | blablabla | id - первичный ключ, уникальный name - имя описываемого объекта, в этой таблице содержится основная информация. Есть ещё одна таблица, с дополнительной информацией по каждому объекту: Таблица moreinf | id | name | some1 | some2 | | 1 | some | ht. | blablabla | В этой таблице id - первичный, уникальный name - внешний ключ, то есть по этому полю будет проводится сопоставоение записей таблиц. Вопрос вот в чем: как создать (какой запрос необходим), чтобы правильно создать вторую таблицу с внешним ключем? И как производить выборку данных, например, мне надо по id найти name в первой таблице и имея этот name во второй таблице получить дополнительные данные по описываемому объекту? |
| Автор: SamDark 28.7.2006, 09:26 | ||
| Raiser 1. Не стоит дублировать name в 2-х таблицах. 2. Для вставки сначала заносим данные в первую таблицу, затем во вторую (во второй ключ не автоинкрементный) с использование в качестве значения id функцию LAST_INSERT_ID(). 3. Выборка из обоих таблиц будет представлять из себя что-то вроде
|
| Автор: madFobos 31.7.2006, 23:45 | ||
| Никогда не стоит делать связь между таблицами по текстовому полю (в твоем случае name), т.к. 1) сравнение строк происходит на порядок мделеннее чисел (при SELECT), а второе ты не сможешь использовать такую возможность как LAST_INSER_ID() при вставке. Так же не стоит во всех таблицах делать первичный ключ с именем id, а то потом запутаешься в связях между таблицами. Я бы таблицы переделал так для начала maininf_id | name | link | description moreinf_id | maininf_id | some1 | some2 Ну и вставка будет примерно такая
|