Частая ситуация при проектировании таблиц MySQL - это использование таблиц связок, когда нужно связать поля двух таблиц с помощью третьей таблицы.
Разберем небольшой пример для понимания того, как это работает и как может нам пригодиться. Мне пришлось немного помучиться недавно с данным вопросом при создании одного сайта небольшой спортивной статистики.
Но для практики я приведу упрощенный пример использования INNER JOIN
для трех простых таблиц.
Предположим, что у нас есть три таблицы, которые можно использовать для простого сайта статей с тегами.
- Первая таблица предназначена для статей.
- Вторая для Тегов к статьям.
- Третья для связи тегов и статей.
Третья таблица и будет нашей таблицей связкой основных двух страниц.
Первая наша таблица с видеоиграми (или статьями) будет такой:
id | title | reg_date | content |
1 | BioShock Infinite | 2016-08-08 |
Вторая таблица с тегами:
id | name |
1 | jennefer |
2 | elizabeth |
И третья таблица, которая определяет связь статей (видеоигр) и тегов:
post_id | tag_id |
1 | 2 |
Приведенный ниже код может вернуть все сообщения, связанные с тегом "elizabeth":
SELECT videogame.id,
videogame.title,
videogame.reg_date,
tags.name,
tags_meta.post_id
FROM tags_meta
INNER JOIN videogame ON videogame.id = tags_meta.post_id
INNER JOIN tags ON tags.id = tags_meta.tag_id
WHERE tags.name = "elizabeth"
ORDER BY videogame.reg_date
В ближайших постах более подробно разберем INNER JOIN трех таблиц.