MySQL вытягивает контент из 2-х таблиц, которые связаны третьей таблицей

В настоящее время у меня есть 2 таблицы в базе данных, из которых мне нужно получить информацию: «содержимое» и «тип». Эти две таблицы связаны третьим именем таблицы «typeMembers». Это структура:

Table Content:
id      content      link      date    isPublished
1       content 1    link 1    3/13/91  1
2       content 2    link 2    3/18/91  1
3       content 3    link 3    3/22/91  1

Table type:
id    name
1     Event
2     Page
3     Test

Table typeMember
id    type_id    content_id
1     1          1
2     2          1
3     3          1
4     1          2
5     1          3

В настоящее время мой запрос настроен как:

//using PDO in PHP
q = $dbc->prepare(
"SELECT a.id, a.content,a.date,a.link, c.name
FROM content a
LEFT OUTER JOIN typeMember b
ON b.content_id = a.id
LEFT OUTER JOIN types c
ON b.type_id = c.id
WHERE a.isPublished = 1
ORDER BY a.date DESC");
$r = $q->execute();

Когда это возвращается, я получаю 1 строку для каждого typeMember в базе данных вместо содержимого. Что я неправильно структурирую?

Данные, которые я хотел бы вернуть:

id      content      link      date      name
1       content 1    link 1    3/13/91   Event, Page, Test
2       content 2    link 2    3/18/91   Event
3       content 3    link 3    3/22/91   Event

Как это возвращается

id      content      link      date      name
1       content 1    link 1    3/13/91   Event
1       content 1    link 1    3/13/91   Page
1       content 1    link 1    3/13/91   Test
2       content 2    link 2    3/18/91   Event
3       content 3    link 3    3/22/91   Event

Редактировать: подача данных фактически заставила меня понять, что происходит. Существует отношение 1 ко многим с содержанием для ввода. Есть ли способ получить все типы в одном запросе?

0

Решение

для получения имени в той же строке вы можете использовать group_Concat

SELECT  a.id, a.content, a.date, a.link, group_concat(c.name )
FROM content a
LEFT  JOIN typeMember b ON b.content_id = a.id
LEFT  JOIN types c ON b.type_id = c.id
WHERE a.isPublished = 1
Group by  a.id, a.content, a.date, a.link
ORDER BY a.date DESC
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]