В настоящее время у меня есть 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 ко многим с содержанием для ввода. Есть ли способ получить все типы в одном запросе?
для получения имени в той же строке вы можете использовать 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
Других решений пока нет …