相同的专辑名称查询结果

时间:2015-08-26 23:49:07

标签: php sql

我正在尝试为歌手插入专辑,例如:

我的心:歌手1

可爱:Singer1和Singer3

跟我说:歌手5

可爱的专辑,由两位歌手共享

等等,在PHP中显示结果时,我喜欢这样:

我的心:歌手1 可爱:歌手1 - 歌手3 碰我:Singer5

偶然的机会,我有一个相同的专辑名称,歌手之间没有共享,在显示结果时,它显示如下:

我的心:歌手1 - 歌手8

可爱:歌手1 - 歌手3

跟我说:歌手5

我的心:歌手1 - 歌手8

然而,Singer1和Singer8并没有分享这张专辑,我想显示如下:

我的心:歌手1

可爱:歌手1 - 歌手3

跟我说:歌手5

我的心:歌手8

$queryy = 'SELECT silsila_ar, id_shksj 
           FROM mariyat_silsila 
              JOIN mariyat_silsila_join on 
                  mariyat_silsila.ids = mariyat_silsila_join.id_silsilaj 
           WHERE mariyat_silsila.silsila_tran = "'.$albumName.'"';
echo $queryy.'<br>';      
$reqq = $connexion->query($queryy);
$resultt = $reqq->fetchAll();

if($resultt){

    //$listShk = array();
    $listShk = '';
    foreach($resultt as $kv) {
        $id_shksj = $kv['id_shksj'];
        $silsila_ar = $kv['silsila_ar'];

        // get sheikh name
        //$queSh = 'SELECT shk_fname, shk_lname FROM sheikh_tbl WHERE shk_tran = "'.$main_shk.'"';

        $queSh = 'SELECT shk_fname, shk_lname, shk_tran 
                  FROM sheikh_tbl 
                  WHERE id_shk = "'.$id_shksj.'"';

    echo $queSh.'</br>';      
    $reqSh = $connexion->query($queSh);
    $resSh = $reqSh->fetchAll();


    foreach($resSh as $aSh)
    {
        $shk_fname = $aSh['shk_fname'];
        $shk_lname = $aSh['shk_lname'];
        $shk_tran = $aSh['shk_tran'];

        $shkFullName = $shk_fname.' '.$shk_lname;

        //$listShk[] = $shkFullName;
        $listShk .= '<a href="Sheikhs/'.$shk_tran.'.html" target="_BLANK">';
        $listShk .= $shkFullName;
        $listShk .= '</a>';
        $listShk .= ' - ';
        $listSheikhs = substr($listShk, 0,-2).'<br />';


    }
}

2 个答案:

答案 0 :(得分:0)

您想要实现的内容取决于您的数据库结构(抱歉,我无法理解您的查询语言)。您的行应具有唯一标识符;通常是数字ID。你可能有一张桌子将专辑与歌手联系起来,对吗?

album_singer
+---------------------+
| album     | singer  |
+---------------------+
| My Heart  | Singer 1|
| My Heart  | Singer 8|
| ...                 |

此表应该只包含相册和歌手的 ID

albums                  singers                 album_singer
+---------------------+ +---------------------+ +----------------------+
| Id      | Name      | | Id     | Name       | | album_id | singer_id |
+---------------------+ +---------------------+ +----------------------+
| 201     | My Heart  | | 101    | Singer 1   | | 201      | 101       |
| 202     | My Heart  | | 102    | Singer 8   | | 202      | 102       |
| ...                 | | ...                 | | ...                  |

如果这是您的结构,您的查询应该是:

SELECT albums.name as album_name, 
       singers.name as singer_name
FROM album_singer 
JOIN albums on album_singer.album_id = albums.id
JOIN singers on album_singer.singer_id = singer.id

# Output:
# +------------------------------------+
# | album_name    | singer_name        |
# +------------------------------------+
# | My Heart      | Singer 1           |
# | My Heart      | Singer 2           |
# +------------------------------------+

答案 1 :(得分:0)

这有用吗? //假设您已连接到数据库... $ album_query =&#34; SELECT id,album FROM album_table ORDER BY id&#34 ;; $ album_results = mysqli_query($ database_connection,$ album_query); //创建while循环列出相册。 while(list($ id,$ album)= mysqli_fetch_array($ album_results,MYSQLI_NUM)){     echo&#39;专辑 - &#39; 。 $ album。 &#39;&LT峰; br&GT;&#39 ;;     echo&#39; Singers - &#39 ;;     //然后根据第一个循环的专辑名称创建另一个查询。     // *注意 - 使用id而不是名字可能更容易做到这一点。     //如果没有公共字段,也许您可​​以在第一个查询中从JOIN设置变量。 ?     $ singers_query =&#34; SELECT singer_id,singer_name,album                       来自singers_table                       专辑=&#39; 。 $ album。 &#39; &#34 ;;     $ singers_results = mysqli_query($ database_connection,$ singers_query);         //现在创建另一个while循环以嵌套在专辑循环中。         while(list($ singer_id,$ singer_name,$ album)= mysqli_fetch_array($ singers_results,MYSQLI_NUM)){             echo $ singer_name。 &#39;,&#39 ;;         }     echo&#br;&lt; br&gt;&lt; br&gt;&#39 ;; }