簡體   English   中英

為什么我的3表JOIN MySQL查詢不起作用?

[英]Why is my 3 table JOIN MySQL query not working?

我有3張桌子:

Table: album
Columns: id, name, description, author, path, image

Table: albumconnect
Columns: id, imageid, albumid

Table: albumimages
Columns: id, path

我正在嘗試用單個JOIN查詢替換所有這些不必要的查詢:

<?php

        $albumID = $_SERVER['QUERY_STRING'];
        $realAlbumID = substr($albumID, 1);
        $realestAlbumID = str_replace('%20', ' ', $realAlbumID);

        $sql = "SELECT * FROM album WHERE id='$realestAlbumID'";
        $result = mysqli_query($conn, $sql);
        $getResult = mysqli_fetch_assoc($result);
        $albumPath = $getResult['path'];

        $sql2 = "SELECT * FROM albumconnect WHERE albumid='$realestAlbumID'";
        $result2 = mysqli_query($conn, $sql2);

        while ($row = $result2->fetch_assoc()){
            $imageId = $row['imageid']; 
            $sql3 = "SELECT * FROM albumimages WHERE id='$imageId'";
            $result3 = mysqli_query($conn, $sql3);
            $getResult3 = mysqli_fetch_assoc($result3);
            $imagePath = $getResult3['path'];
            echo '<div class="imageContainerAlbums"><li class="listAlbums"><img class="specificAlbumThumnails" src="'.$albumPath.$imagePath.'" alt="Random image" /></li></div>';
        };

?>

現在,我根據在線閱讀的內容提出了JOIN查詢,它是:

$sql5 = "SELECT * FROM album
                JOIN albumconnect ON albumconnect.albumid=album.id
                JOIN albumimages ON albumimages.id=albumconnect.imageid
                WHERE id='$realestAlbumID'";
        $result5 = mysqli_query($conn, $sql5);

但是,當我嘗試對內容進行var_dump轉換時,它會顯示Null,因此我認為查詢不正確,但是我找不到正確的方法。

應該是這樣的。 我沒有測試。 就像@Difster正確說的那樣,SQL引擎不知道應該引用哪個id 因此,定義表別名並為它們加上引用列的前綴。 然后也為列名定義唯一的別名。 否則,您的sql語句幾乎是完美的。

<?php

$albumID = $_SERVER['QUERY_STRING'];
$realAlbumID = substr($albumID, 1);
$realestAlbumID = str_replace('%20', ' ', $realAlbumID);

$sql = "SELECT 
            alb.name AS album_name,
            alb.description AS album_description,
            alb.author AS album_author,
            alb.path AS album_path,
            alb.image AS album_image,
            ali.path AS image_path
        FROM album AS alb
        LEFT JOIN albumconnect AS alc ON alc.albumid = alb.id
        LEFT JOIN albumimages AS ali ON ali.id = alc.imageid
        WHERE alb.id = '$realestAlbumID'";
$result = mysqli_query($conn, $sql);

while ($row = $result->fetch_assoc()) {
    $albumPath = $row['album_path'];
    $imagePath = $row['image_path'];
    echo '<div class="imageContainerAlbums">';
    echo '<li class="listAlbums">';
    echo '<img class="specificAlbumThumnails" src="' . $albumPath . $imagePath . '" alt="Random image" />';
    echo '</li>';
    echo '</div>';
}

編輯1:

sql語句中的列(以后不使用)是可選的。 因此,如果以后不需要它們,則無需選擇所有列。

也許您也正在為alcali表使用NULL值的行。 這意味着並非所有相冊都具有圖像。 然后,您必須給我們表中的值,以便我們可以為您提供適當的進一步WHERE條件,例如WHERE ali IS NOT NULL 我的這個答案只是您的起點。

編輯2:

這個版本也可以。 我只是更改了sql語句。

<?php

$albumID = $_SERVER['QUERY_STRING'];
$realAlbumID = substr($albumID, 1);
$realestAlbumID = str_replace('%20', ' ', $realAlbumID);

$sql = "SELECT 
            alb.name AS album_name,
            alb.description AS album_description,
            alb.author AS album_author,
            alb.path AS album_path,
            alb.image AS album_image,
            ali.path AS image_path
        FROM albumimages AS ali 
        LEFT JOIN albumconnect AS alc ON alc.imageid = ali.id 
        LEFT JOIN album AS alb ON alb.id = alc.albumid 
        WHERE alb.id = '$realestAlbumID'";
$result = mysqli_query($conn, $sql);

while ($row = $result->fetch_assoc()) {
    $albumPath = $row['album_path'];
    $imagePath = $row['image_path'];
    echo '<div class="imageContainerAlbums">';
    echo '<li class="listAlbums">';
    echo '<img class="specificAlbumThumnails" src="' . $albumPath . $imagePath . '" alt="Random image" />';
    echo '</li>';
    echo '</div>';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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