Обновлено: с помощью MySQL.
В этом примере у меня есть таблица сообщений, таблица пользователей, таблица Tagged_Posts и таблица тегов.
В таблице сообщений есть внешний ключ для user_id, который соответствует таблице Users и столбцу id.
В таблице Tagged_posts есть два внешних ключа, один для tag_id и один для post_id.
В таблице тегов есть только идентификатор и слаг.
Я пытаюсь запросить сообщения и получить все данные, относящиеся к этому сообщению, т.е. данные Post, данные пользователя, о котором написано сообщение, и какие теги принадлежат этому сообщению.
У одного сообщения может быть много тегов.
Это SQL-запрос, который я использую:
$sql = "SELECT posts.title, users.name, users.handle, users.email, tags.slug as tags
from posts
INNER JOIN users ON posts.user_id = users.id
INNER JOIN tagged_posts ON posts.id = tagged_posts.post_id
INNER JOIN tags ON tagged_posts.tag_id = tags.id";
Поскольку с этим конкретным сообщением связано 3 тега, запрос возвращает одно и то же сообщение 3 раза с разными значениями, указанными для тега. Увидеть ниже:
Array
(
[0] => Array
(
[title] => This is my first Post!
[name] => exampleuser
[handle] => example
[email] => [email protected]
[tags] => database-design
)
[1] => Array
(
[title] => This is my first Post!
[name] => exampleuser
[handle] => example
[email] => [email protected]
[tags] => sql
)
[2] => Array
(
[title] => This is my first Post!
[name] => exampleuser
[handle] => example
[email] => [email protected]
[tags] => php
)
)
Могу ли я сделать один запрос и получить все, что связано с сообщением?
MySQL. Я добавлю это к своему вопросу, спасибо






Вы хотите объединить результаты вместе. Например, в MySQL вы бы сделали:
select p.title, u.name, u.handle, u.email, group_concat(t.slug) as tags
from posts p join
users u
on p.user_id = u.id join
tagged_posts tp
on p.id = tp.post_id join
tags t
on tp.tag_id = t.id
group by p.title, u.name, u.handle, u.email;
на самом деле я только что столкнулся с проблемой с group_concat. Если у меня есть несколько сообщений, он покажет только 1 сообщение и добавит все теги вместе, даже если они не принадлежат этому post_id. вы хотите, чтобы я отредактировал свой вопрос?
О, ты прав ... Не знаю, что случилось в первый раз. На самом деле он работает так, как должен. еще раз спасибо
эй, у вас есть еще один вопрос по этому поводу, если у вас когда-нибудь появится минутка: stackoverflow.com/questions/52139458/…
Какую базу данных вы используете?