gpt4 book ai didi

php - MySQLi - 从多个表中查询选择的更好方法

转载 作者:行者123 更新时间:2023-11-29 17:30:29 25 4
gpt4 key购买 nike

我无法弄清楚如何使用“链接”表指向它来从多个表中查询。我有一个“节目”表和一个“流派”表,我有一个“链接表”,其中有 show_idgenre_id。它连接到流派中的 id 和节目中的 id。我的问题是,我不知道是否可以在查询节目的同一选择中从流派表中收集名称

现在,这就是我正在做的事情:

$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'];
}

并且在“链接表”上,一个节目可能有多个流派,多个流派_id 行指向同一个节目_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;

这将为每个流派返回一行,并以逗号分隔该流派的节目列表:

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;

关于php - MySQLi - 从多个表中查询选择的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com