簡體   English   中英

從我的三個表中選擇數據

[英]Select data from my three tables

我有三張桌子,一張叫album ,另一張是soundtrack ,最后但並非最不重要的是artist

一張專輯下有多個曲目(很明顯)和一個藝術家的名字...

因此,它應該是這樣的:
所需輸出:

 |---------------------|
 |AlbumName by Charlie |
 |---------------------|
 | 1. See you again    |
 |---------------------|
 | 2. One call Away    |
 |---------------------|
 | Album by Ed Sheeran |
 |---------------------|
 | 1. Perfect          |
 |---------------------|
 | 2. Dive             |
 |---------------------|

下面是mysqli_fetch_array() ,它與while-loop用於填充<table>標記。

$query = "SELECT a.* AS Album, b.* AS Track, c.* AS Artist 
        FROM album a 
        INNER JOIN track b ON a.album_id=b.album_id 
        INNER JOIN artist c ON a.artist_id=c.artist_id 
        ORDER BY a.album_id ASC";

$result = mysqli_query($con, $query);
$c=0;
while($row = mysqli_fetch_assoc($result)) {
   $album = $row['Album']." (".$row['Artist'].") ";
   $track = $row['Track'];
}

問題是,當我運行這段代碼時……我只能得到這個結果……

|---------------------|
|AlbumName by Charlie |
|---------------------|
|  1. See you again   |
|---------------------|
|  2. One call away   |
|---------------------|
|  1. Perfect         |
|---------------------|
|  2.  Dive           |
|---------------------|

它獲得了原聲帶的列表,包括原聲帶的ID,但是, Album Name上的情況並不理想

我希望它看起來像“ 所需的輸出” 有任何想法嗎? 我嘗試搜索stackoverflow,但似乎無法指導我解決同一問題,因此我自己做了一個。 請原諒(不要標記)我是否已經存在,只是我不知道在哪里找到它。 還有pleeeeease ...我需要一個立即有效的答案。 多謝你們!

至於數據庫結構

album = {album_id, artist_id,album_title}
artist = {artist_id, artist_name}
track = {song_id, album_id, song_title}

更新!
好的,這有點失控了。 當我嘗試@swellar的建議時,發生了什么事。 當我撤消它時,輸出保持不變。 看到下面的結果...

|---------------------|
|AlbumName by Charlie |
|---------------------|
|  1. See you again   |
|---------------------|
|AlbumName by Charlie |
|---------------------|
|  2. One Call Away   |
|---------------------|
|AlbumName by Charlie |
|---------------------|
|  1.  Perfect        |
|---------------------|
|AlbumName by Charlie |
|---------------------|
|  2.   Dive          |
|---------------------|

我想要的是給每個Album一個或多個配樂,但是每次我敢更改query時,它都會變得混亂。 如何mysqli_fetch_array()使其顯示所需的輸出?

這是你的SQL

注意,我在那邊下了3個訂單。 首先是歌手姓名,這會將所有歌手的資料分組在一起,然后是專輯名稱,然后是歌曲ID。

$sql = "SELECT a.album_title AS Album,
               t.song_title AS Track,
               t.song_id AS ID,
               n.artist_name AS Artist
        FROM album AS a
            INNER JOIN track AS t
                ON a.album_id = t.album_id
            INNER JOIN artist AS n
                ON a.artist_id = n.artist_ID
        ORDER BY n.artist_name ASC,
                 a.album_id ASC,
                 t.song_id ASC";


/*
That SQL will generate the following array

Array
(
    [Album] => AlbumName
    [Track] => See you again
    [ID] => 1
    [Artist] => Charlie
)
Array
(
    [Album] => AlbumName
    [Track] => One call Away
    [ID] => 2
    [Artist] => Charlie
)
Array
(
    [Album] => Album
    [Track] => Perfect
    [ID] => 1
    [Artist] => Ed Sheeran
)
Array
(
    [Album] => Album
    [Track] => Dive
    [ID] => 2
    [Artist] => Ed Sheeran
)
*/

以下是您的while循環

<table>
<?php
// Some placeholders
$album = null;

while($row = mysqli_fetch_assoc($result))
{
    if($row['Album'] !== $album)
    {
?>
    <tr>
        <td style="border: 1px solid #000000; background-color: #dedede;"><?php echo $row['Album']; ?> by <?php echo $row['Artist']; ?></td>
    </tr>
    <tr>
        <td style="border: 1px solid #000000;"><?php echo $row['ID']; ?>: <?php echo $row['Track']; ?></td>
    </tr>
<?php
    }
    else
    {
?>
    <tr>
        <td style="border: 1px solid #000000;"><?php echo $row['ID']; ?>: <?php echo $row['Track']; ?></td>
    </tr>
<?php
    }

   $album = $row['Album'];
}
?>
</table>

總輸出為:

 <table> <tr> <td style="border: 1px solid #000000; background-color: #dedede;">AlbumName by Charlie</td> </tr> <tr> <td style="border: 1px solid #000000;">1: See you again</td> </tr> <tr> <td style="border: 1px solid #000000;">2: One call Away</td> </tr> <tr> <td style="border: 1px solid #000000; background-color: #dedede;">Album by Ed Sheeran</td> </tr> <tr> <td style="border: 1px solid #000000;">1: Perfect</td> </tr> <tr> <td style="border: 1px solid #000000;">2: Dive</td> </tr> </table> 

有更好的方法可以解決此問題,但是不知道您的工作環境,技能,要求,其他代碼,這是您基於其解決方案的最佳快速而又骯臟的解決方案。 這可以滿足您的要求。

暫無
暫無

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

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