SQL ORDER行BY行

时间:2016-02-07 02:54:16

标签: php mysql sql

我正在尝试从数据库中显示音乐信息。我通过这个SQL语句获得了信息:

SELECT artist.Artist,
       artist.Real,
       artist.Genre,
       album.Album,
       album.Year,
       album.Image,
       song.Song,
       song.Feat,
       song.Time,
    CASE
      WHEN song.Song LIKE :1 THEN \'song\'
      WHEN album.Album LIKE :1 THEN \'album\'
      WHEN artist.Genre LIKE :1 THEN \'genre\'
    ELSE \'artist\' END AS "Case"
    FROM artist
      INNER JOIN album ON album.Artist = artist.Artist
      INNER JOIN song ON song.Album = album.Album 
    WHERE artist.Artist LIKE :1 OR 
          artist.Real LIKE :1 OR 
          artist.Genre LIKE :1 OR 
          album.Album LIKE :1 OR 
          song.Song LIKE :1

我正在分组中显示信息:艺术家,然后是专辑,然后是歌曲。只有当我显示艺术家和专辑时,才有与歌曲结果一样多的重复。因此,我可能会尝试使用此代码来消除重复项:

for($i = 0; $i < sizeof($row); $i++) {
  if($row[$i]['Artist'] != $row[$i-1]['Artist']) {
    // html content here
  }
}

我正在尝试订购歌曲,以便首先显示最受欢迎的歌曲(将ORDER BY song.Click DESC添加到结尾)。所以现在,当显示内容时,会再次出现重复,因为当前的$row并不总是重复。

这就是为什么我想知道我是否可以ORDER只有歌曲,以便我的重复删除代码仍然有用。

1 个答案:

答案 0 :(得分:1)

SELECT artist.Artist,
   artist.Real,
   artist.Genre,
   album.Album,
   album.Year,
   album.Image,
   song.Song,
   song.Feat,
   song.Time,
CASE
  WHEN song.Song LIKE :1 THEN \'song\'
  WHEN album.Album LIKE :1 THEN \'album\'
  WHEN artist.Genre LIKE :1 THEN \'genre\'
ELSE \'artist\' END AS "Case"
FROM artist
  INNER JOIN album ON album.Artist = artist.Artist
  INNER JOIN song ON song.Album = album.Album 
WHERE artist.Artist LIKE :1 OR 
      artist.Real LIKE :1 OR 
      artist.Genre LIKE :1 OR 
      album.Album LIKE :1 OR 
      song.Song LIKE :1
Group by artist.Artist,
   artist.Real,
   artist.Genre,
   album.Album,
   album.Year,
   album.Image,
   song.Song,
   song.Feat,
   song.Time,