Как связать две таблицы в php
Как связать таблицы в базе данных (PHP, MySQLi)
Делаю БД для менеджера, на сайте нужно (создавать и удалять категории/товары). Никак не могу придумать как связать на MySQLi эти таблицы. Вот пример:
Так вот, сам вопрос: При выводе в PHP создается меню из главного списка, и дальше переход к след таблицам., то есть нужно как-то связать записи одной таблицы с другой. я думаю может в таблицах с Категориями, создавать отдельный столбец, и туда записывать ссылки на его дочерную таблицу? а таблицам генерировать какое-то уникальное имя
1 ответ 1
@Юра Сучко, то, как вы поставили себе задачу, говорит, что у вас только все начинается. Тогда вам стоит начать с того, чтобы составить список действий, которые будут выполняться приложениями (браузером или мобильным приложением, не важно). По данному списку вы увидите какие данные и в каком виде вам понадобятся. Например (с примерами запросов):
Поиск по каталогу. Вам понадобится весь список товаров и при этом желательно чтоб список не надо было собирать из разных мест.
Отображение категорий и товаров в определенной категории, желательно универсально относительно родительской категории.
Отображение корзины, в которой могут быть товары из любой категории
Добавление товаров в определенную категорию, или категории в категорию, желательно без изменения структуры бд.
Данная структура будет удобной и для админки, где редактировать каталог, так и для пользователей (десктопных или мобильных), ибо данные, которые нужны будут пользователю, будут возвращаться в том объеме, который вы уменьшить не сможете при всем своем желании.
Мобильное приложение, не знаю какое у вас предполагается, может быть таким:
Как правильно связать таблицы?
Есть таблица 1. Она служит для заказов:
Есть таблица 2. Она служит для информации по книге.
Как связать эти таблицы, чтобы отобразить данные этой книги в заказе? Ее модель, автора.
Просто я передаю в таблицу заказов айди(книгу, которую купили), а в другой таблице мне надо вывести данные об этой книге. Как-то так. Когда я нажимаю на «купить», то записывается в таблицу 1 Kniga_id номер книги, который находится в таблице 2. При выводе информации у меня показывает только ID
http://prntscr.com/79xhh6 cейчас так. А хочется, чтобы выводило модель и автора
1 ответ 1
потому что надо связывать не по выбранному наугад полю, а по тому, которое логически соответствует полю в первой таблице. Не говоря уже о том, что связываемые колонки должны быть одного типа, и числовую никогда не связывают с текстовой.
LEFT JOIN здесь так же не нужен, надо оставить обычный.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками php mysql база-данных или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.17.40233
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Создание связей между таблицами с помощью phpmyadmin
В этой заметке мы научимся создавать связи между таблицами в базе данных MySQL с помощью phpmyadmin. Если по какой-то причине вы не желаете использовать phpmyadmin, смотрите приведенные ниже SQL-запросы.
Почему же связи удобно держать в самой базе данных? Ведь эту задачу обычно решает так и само приложение? Все дело в ограничениях и действиях при изменении, которые можно наложить на связи.
Например, можно запретить удалять категорию, если с ней связана хотя б одна заметка. Или удалить все заметки, если удалена категория. Или установить NULL в связующее поле. В любом случае, с помощью связей повышается отказоустойчивость и надежность приложения.
Для того, чтобы связать таблицы по полям, необходимо сначала добавить в индекс связываемые поля:
В phpmyadmin выбираем таблицу, выбираем режим структуры, выделяем поле, для которого будем делать внешнюю связь и кликаем Индекс.
Обратите внимание на разницу между «Индекс» и «Уникальный». Уникальный индекс можно использовать, например, до поля id, то есть там, где значения не повторяются.
Это же действие можно сделать с помощью SQL-запроса:
Аналогично добавляем индекс (только в моем случае теперь уже уникальный или первичный) для таблицы, на которую ссылаемся, для поля id. Поскольку поле id у меня идентификатор, для него делаем первичный ключ. Уникальный ключ мог бы понадобится для других уникальных полей.
С помощью SQL-запроса:
Теперь осталось только связать таблицы. Для этого кликаем внизу на пункт Связи:
Теперь для доступных полей (а доступны только проиндексированные поля) выбираем связь с внешними таблицами и действия при изменении записей в таблицах:
Через SQL-запрос:
на этом все, таблицы связаны через foreign key.
Связи между таблицами базы данных
1. Введение
Связи — это довольна важная тема, которую следует понимать при проектировании баз данных. По своему личному опыту скажу, что осознав связи, мне намного легче далось понимание нормализации базы данных.
1.1. Для кого эта статья?
Эта статья будет полезна тем, кто хочет разобраться со связями между таблицами базы данных. В ней я постарался рассказать на понятном языке, что это такое. Для лучшего понимания темы, я чередую теоретический материал с практическими примерами, представленными в виде диаграммы и запроса, создающего нужные нам таблицы. Я использую СУБД Microsoft SQL Server и запросы пишу на T-SQL. Написанный мною код должен работать и на других СУБД, поскольку запросы являются универсальными и не используют специфических конструкций языка T-SQL.
1.2. Как вы можете применить эти знания?
2. Благодарности
Учтены были советы и критика авторов jobgemws, unfilled, firnind, Hamaruba.
Спасибо!
3.1. Как организовываются связи?
Связи создаются с помощью внешних ключей (foreign key).
Внешний ключ — это атрибут или набор атрибутов, которые ссылаются на primary key или unique другой таблицы. Другими словами, это что-то вроде указателя на строку другой таблицы.
3.2. Виды связей
4. Многие ко многим
Представим, что нам нужно написать БД, которая будет хранить работником IT-компании. При этом существует некий стандартный набор должностей. При этом:
4.1. Как построить такие таблицы?
Слева указаны работники (их id), справа — должности (их id). Работники и должности на этой таблице указываются с помощью id’шников.
На эту таблицу можно посмотреть с двух сторон:
4.2. Реализация
С помощью ограничения foreign key мы можем ссылаться на primary key или unique другой таблицы. В этом примере мы
4.3. Вывод
Для реализации связи многие ко многим нам нужен некий посредник между двумя рассматриваемыми таблицами. Он должен хранить два внешних ключа, первый из которых ссылается на первую таблицу, а второй — на вторую.
5. Один ко многим
Эта самая распространенная связь между базами данных. Мы рассматриваем ее после связи многие ко многим для сравнения.
Предположим, нам нужно реализовать некую БД, которая ведет учет данных о пользователях. У пользователя есть: имя, фамилия, возраст, номера телефонов. При этом у каждого пользователя может быть от одного и больше номеров телефонов (многие номера телефонов).
В этом случае мы наблюдаем следующее: пользователь может иметь многие номера телефонов, но нельзя сказать, что номеру телефона принадлежит определенный пользователь.
Другими словами, телефон принадлежит только одному пользователю. А пользователю могут принадлежать 1 и более телефонов (многие).
Как мы видим, это отношение один ко многим.
5.1. Как построить такие таблицы?
PhoneId | PersonId | PhoneNumber |
---|---|---|
1 | 5 | 11 091-10 |
2 | 5 | 19 124-66 |
3 | 17 | 21 972-02 |
Данная таблица представляет три номера телефона. При этом номера телефона с id 1 и 2 принадлежат пользователю с id 5. А вот номер с id 3 принадлежит пользователю с id 17.
Заметка. Если бы у таблицы «Phones» было бы больше атрибутов, то мы смело бы их добавляли в эту таблицу.
5.2. Почему мы не делаем тут таблицу-посредника?
Таблица-посредник нужна только в том случае, если мы имеем связь многие-ко-многим. По той простой причине, что мы можем рассматривать ее с двух сторон. Как, например, таблицу EmployeesPositions ранее:
5.3. Реализация
6. Один к одному
Представим, что на работе вам дали задание написать БД для учета всех работников для HR. Начальник уверял, что компании нужно знать только об имени, возрасте и телефоне работника. Вы разработали такую БД и поместили в нее всю 1000 работников компании. И тут начальник говорит, что им зачем-то нужно знать о том, является ли работник инвалидом или нет. Наиболее простое, что приходит в голову — это добавить новый столбец типа bool в вашу таблицу. Но это слишком долго вписывать 1000 значений и ведь true вы будете вписывать намного реже, чем false (2% будут true, например).
Более простым решением будет создать новую таблицу, назовем ее «DisabledEmployee». Она будет выглядеть так:
Но это еще не связь один к одному. Дело в том, что в такую таблицу работник может быть вписан более одного раза, соответственно, мы получили отношение один ко многим: работник может быть несколько раз инвалидом. Нужно сделать так, чтобы работник мог быть вписан в таблицу только один раз, соответственно, мог быть инвалидом только один раз. Для этого нам нужно указать, что столбец EmployeeId может хранить только уникальные значения. Нам нужно просто наложить на столбец EmloyeeId ограничение unique. Это ограничение сообщает, что атрибут может принимать только уникальные значения.
Выполнив это мы получили связь один к одному.
Заметка. Обратите внимание на то, что мы могли также наложить на атрибут EmloyeeId ограничение primary key. Оно отличается от ограничения unique лишь тем, что не может принимать значения null.
6.1. Вывод
Можно сказать, что отношение один к одному — это разделение одной и той же таблицы на две.
6.2. Реализация
7. Обязательные и необязательные связи
Связи можно поделить на обязательные и необязательные.
7.1. Один ко многим
У одной биологической матери может быть много детей. У ребенка есть только одна биологическая мать.
А) У женщины необязательно есть свои дети. Соответственно, связь необязательна.
Б) У ребенка обязательно есть только одна биологическая мать – в таком случае, связь обязательна.
7.2. Один к одному
У одного человека может быть только один загранпаспорт. У одного загранпаспорта есть только один владелец.
А) Наличие загранпаспорта необязательно – его может и не быть у гражданина. Это необязательная связь.
Б) У загранпаспорта обязательно есть только один владелец. В этом случае, это уже обязательная связь.
7.3. Многие ко многим
Человек может инвестировать в акции разных компаний (многих). Инвесторами какой-то компании являются определенные люди (многие).
А) Человек может вообще не инвестировать свои деньги в акции.
Б) Акции компании мог никто не купить.
8. Как читать диаграммы?
Выше я приводил диаграммы созданных нами таблиц. Но для того, чтобы их понимать, нужно знать, как их «читать». Разберемся в этом на примере диаграммы из пункта 5.3.
Мы видим отношение один ко многим. Одной персоне принадлежит много телефонов.
9. Итоги
10. Задачи
Для лучшего усвоения материала предлагаю вам решить следующие задачи:
Работа со связанными таблицами бд MySQL через PHP
Помощь в написании контрольных, курсовых и дипломных работ здесь.
PHP + MySQL с двумя таблицами
Пользователь 20 присылает приглашение пользователю 19, и у пользователя 19 приходит соответствующая.
Работа с таблицами MySQL
Немножко запутался, какую таблицу и ячейки создавать? //file db.php 4
Насколько я понял ты вносиш значение 999.Но это Foreign KEY.Он не может вставится поскольку в таблице школа нету значения поддержка целосности данных.
Для теста внесите в таблицу школу значение 999 и увидите,что ваш запрос будет успешным
Насколько я понял ты вносиш значение 999.Но это Foreign KEY.Он не может вставится поскольку в таблице школа нету значения поддержка целосности данных.
Для теста внесите в таблицу школу значение 999 и увидите,что ваш запрос будет успешным
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Работа со связанными таблицами
Есть у меня три таблицы (показаны на рисунке), как мне вывести CustomerName из таблицы customer по.
Работа со связанными таблицами
Этот вопрос я задал и в разделе VB, извините за дублирование, но это тесно связано с SQL/ База.
Работа со связанными таблицами
Hi All! Есть две таблицы. Первая: КОД_БОЛЬНОГО ФИО_БОЛЬНОГО
Работа с несколькими таблицами PHP+MySQL
Здравствуйте. Очень нужна помощь. Есть таблица категорий, где хранятся названия категорий. Я делаю.