簡體   English   中英

MySQLi-查詢多個表中的選擇的更好方法

[英]MySQLi - Better way to query select from multiple tables

我看不出如何使用“鏈接”表指向多個表來查詢它。 我有一個“顯示”表和一個“流派”表,我有一個“鏈接表”,其中有show_idgenre_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM