按名称分组,但保留与名称关联的所有标签

Nin*_*ina 2 php mysql joomla group-by duplicate-removal

我想知道是否有人碰到以下内容:

SQL查询:

SELECT s.ID , s.name , s.artist, m.tag_ID, t.name, s.*, m.*, t.*
                FROM lms_song s
                LEFT JOIN lms_map m
                ON s.ID = m.ID
                LEFT JOIN lms_tag t 
                ON m.tag_id = t.ID
                WHERE s.created_by='.$userId.'                                  
                ORDER BY '.$Field.' '.$Direction;
Run Code Online (Sandbox Code Playgroud)

PHP:

<? foreach($this->songs AS $song){ ?>
<tr>
    <td>

        <?php echo $song->songName;?>

    </td>
    <td>
        <?php echo $song->artist;?>
    </td>

    <td>        
        <?php echo $song->tagname;?>

    </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

它当前显示用户列出的所有"歌曲".

虽然它确实列出了与用户相关的所有歌曲,但它具有多个歌曲名称重复,因为每个歌曲名称都有与之关联的标签.

我试图只为"歌曲名称"显示"Group By s.name".

但是,这将其限制为一个t.name(标记).

我希望每个艺术家(s.artist)不显示歌曲名称(s.name)的重复,同时显示与其关联的所有标签(t.name).

任何帮助表示赞赏.

谢谢!

Gor*_*off 5

我认为你正在寻找group_concat()group by:

SELECT s.ID , s.name , s.artist,
       group_concat(m.tag_ID) as tagids,
       group_concat(t.name) as tagnames
FROM lms_song s LEFT JOIN
     lms_map m
     ON s.ID = m.ID LEFT JOIN 
     lms_tag t 
     ON m.tag_id = t.ID
WHERE s.created_by='.$userId.'
GROUP BY s.ID, s.name , s.artist                                 
ORDER BY '.$Field.' '.$Direction;
Run Code Online (Sandbox Code Playgroud)