Как создать «связь» между двумя таблицами mySQL? - PullRequest
1 голос
/ 20 мая 2011

У меня есть две таблицы, которые выглядят следующим образом:

Персона (Имя таблицы)

Имя1 / Телефон1 / Электронная почта1 / Адрес1 / Организация1 / Заметки1 (Поля)

Организация(Имя таблицы)

Organization1 / Phone2 / Email2 / Address2 / Web2 / Notes2 (Поля)

Organization1 - единственное общее поле между двумя таблицами.

Когда яотображать данные о человеке, я также хочу проверить, есть ли данные об их организации, а также отобразить их, если они существуют.Я использую PHP для взаимодействия с MySQL.

Ответы [ 4 ]

3 голосов
/ 20 мая 2011

Вам нужно JOIN таблицы.

SELECT * FROM Person LEFT JOIN Organization ON Person.Organization = Organization.Name;

Предполагается, что отношения - это название организации. Я сделал LEFT JOIN с тех пор, как вы сказали , если существует . Проверьте этот учебник для более подробной информации о присоединении таблиц.

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

2 голосов
/ 20 мая 2011

Этот пост - объяснение отношений, а не код для использования. Если хочешь, посмотри в другом месте
Ну, связи между таблицами называются отношениями. Есть 3 типа отношений.

1) Один -> Один - этот тип отношения означает, что 1 строка связана с 1 другой строкой в ​​другой таблице

2) Один -> Много - этот тип отношения означает, что 1 строка связана с переменным количеством строк в другой таблице.
Например, папка может иметь несколько файлов, но файл не может иметь несколько папок. Таким образом, в этом случае 1 будет папкой, а множество - файлами.

3) Многие -> Многие - этот тип отношения означает, что многие строки могут относиться ко многим другим строкам.
Примером могут быть метки. Вы можете пометить многие вещи одним и тем же именем (например, настольное устройство), и каждая вещь может иметь несколько ярлыков (лампа может иметь как настольное, так и световое обозначение).

.
Итак, теперь, когда вы знаете разные отношения, мы перейдем к вашему вопросу. Отношение, на которое вы смотрите, является отношением один ко многим, в одной корпорации может быть много людей, но у человека может быть только одна корпорация. Я полагаю, что человек может работать на нескольких людей, но это гораздо сложнее (поэтому мы пропустим это).

Отношения «один ко многим», безусловно, являются наиболее распространенными, и их довольно легко сделать. Вот где вступают соединения (левые, правые и внутренние соединения). У Tizag есть отличное руководство по соединениям здесь: http://www.tizag.com/sqlTutorial/sqljoin.php.

Надеюсь, это поможет.

2 голосов
/ 20 мая 2011

Вы должны использовать внешний ключ , но вам нужно использовать механизм хранения InnoDB (MyISAM пока не поддерживает внешние ключи).

0 голосов
/ 20 мая 2011

Сделайте так, чтобы ваши таблицы выглядели примерно так:

Person_ID, Имя, Телефон, Электронная почта, Адрес, Organisation_ID, Заметки (или, если у вас есть несколько заметок, создайте отдельную таблицу, которая сопоставляет person_id с заметкой).

Organisation_ID, имя, телефон, электронная почта, адрес, Интернет, заметки.

Выберите своего человека, затем, если Organisation_ID существует, выберите организацию, где Organisation_ID равен идентификатору, который вы получили из строки человека.

...