[英]MySQLi - Better way to query select from multiple tables
我看不出如何使用“链接”表指向多个表来查询它。 我有一个“显示”表和一个“流派”表,我有一个“链接表”,其中有show_id
和genre_id
。 它连接到id
的流派和id
的节目。 我的问题是,我不知道是否可以在查询节目的同一选择中从流派表中收集name
。
现在,这就是我正在做的:
$query = $DB->query('SELECT * FROM shows');
while ($show = $query->fetch_assoc()) {
$get_genres = $DB->query('SELECT genre_id, show_id FROM shows_genres WHERE show_id = ' . $show['id']);
$allgenres = '';
while ($genre = $get_genres->fetch_assoc()) {
$genre_name = $DB->query('SELECT id, name FROM genres WHERE id = ' . $genre['genre_id'])->fetch_assoc();
$allgenres .= $genre_name['name'];
}
并且在“链接表”上,节目可能具有不止一种类型的节目,多个genre_id行指向同一show_id。
凌乱的,不是吗? 有没有办法从第一个查询中选择所有这些?
表结构如下:
SHOWS: id, title, summary
SHOWS_GENRES: show_id, genre_id
GENRES: id, name, description
您可以使用JOIN使用单个SQL语句执行此操作:
SELECT
g.name,
g.description,
s.title,
s.summary
FROM SHOWS s
JOIN SHOWA_GENRES sg
ON s.id = sg.show_id
JOIN GENRES g
ON sg.genre_id = g.id
WHERE s.id = show['id']
ORDER BY g.name.s.title;
每个类型将返回一行,并以逗号分隔该类型的show列表:
SELECT
g.name,
g.description,
GROUP_CONCAT(s.title) as shows
FROM SHOWS s
JOIN SHOWA_GENRES sg
ON s.id = sg.show_id
JOIN GENRES g
ON sg.genre_id
GROUP BY g.id
ORDER BY g.name;
如果要显示节目及其类型的列表,可以使用以下方法:
SELECT
s.title,
s.summary,
GROUP_CONCAT(g.name) as `genres`
FROM SHOWS s
JOIN SHOWA_GENRES sg
ON s.id = sg.show_id
JOIN GENRES g
ON sg.genre_id
GROUP BY s.id
ORDER BY s.title;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.