Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связянные таблицы, как работать с такими таблицами 
:(
    Опции темы
Raiser
  Дата 28.7.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 30.5.2006

Репутация: нет
Всего: нет



Здравствуйте, хочу разобраться со связанными таблицами.
У меня есть несколько таблиц:
Таблица  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 во второй таблице получить дополнительные данные по описываемому объекту?  

Это сообщение отредактировал(а) Raiser - 28.7.2006, 09:19
PM MAIL   Вверх
SamDark
Дата 28.7.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 2
Всего: 38



Raiser
1. Не стоит дублировать name в 2-х таблицах.
2. Для вставки сначала заносим данные в первую таблицу, затем во вторую (во второй ключ не автоинкрементный) с использование в качестве значения id функцию LAST_INSERT_ID().
3. Выборка из обоих таблиц будет представлять из себя что-то вроде
Код

select * from maininf ma, moreinf mo where ma.id=mo.id and <тут критерий выборки>
 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
madFobos
Дата 31.7.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Никогда не стоит делать связь между таблицами по текстовому полю (в твоем случае name), т.к. 1) сравнение строк происходит на порядок мделеннее чисел (при SELECT), а второе ты не сможешь использовать такую возможность как LAST_INSER_ID() при вставке. Так же не стоит во всех таблицах делать первичный ключ с именем id, а то потом запутаешься в связях между таблицами.

Я бы таблицы переделал так для начала
maininf_id | name | link | description
moreinf_id | maininf_id | some1 | some2

Ну и вставка будет примерно такая

Код

  mysql_query("INSERT INTO mainif (name, link, description) VALUES ('value1', 'value2', 'value3')");
  mysql_query("INSERT INTO moreinf (mainif_id, some1, some2) VALUE (".mysql_insert_id().", 'more1', 'more2')");
  

Это сообщение отредактировал(а) madFobos - 31.7.2006, 23:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0463 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.