如果存在多个字段,则只使用一个字段 - mysql

时间:2013-10-30 02:45:01

标签: php mysql sql

我正在制作专辑列表,数据库中的信息是歌曲标题,艺术家标题,专辑标题和专辑封面的URL。

我完全死路一条,因为我从未尝试过以下方面的成功:

如果有多首相同专辑的歌曲,只需使用其中一个专辑名称并继续下一个。

我打算做的是用艺术品,专辑名称和艺术家填写表格。然后它会显示下一张专辑,依此类推。这是一个例子:

<td><center><img width="150" src="http://ecx.images-amazon.com/images/I/51Ey1zeerzL.jpg"><br><strong>The Wall</strong><br>Pink Floyd</center></font></a></td>

<td><center><img width="150" src="http://stcmjfpp1312.files.wordpress.com/2012/09/led-zeppelin-mothership.jpg"><br><strong>Mothership</strong><br>Led Zeppelin</center></td>

<td><center><img width="150" src="https://s3.amazonaws.com/NRNArt/Slightly-Stoopid--Top-Of-The-World.jpg"><br><strong>Top of the World</strong><br>Slightly Stoopid</center></td>

我的MySQL表:

    mysql> DESCRIBE musicinfo;
+----------+---------------+------+-----+---------+----------------+
| Field    | Type          | Null | Key | Default | Extra          |
+----------+---------------+------+-----+---------+----------------+
| auto     | int(11)       | NO   | PRI | NULL    | auto_increment | 
| file     | varchar(150)  | YES  |     | NULL    |                | 
| artist   | varchar(150)  | YES  |     | NULL    |                | 
| album    | varchar(150)  | YES  |     | NULL    |                | 
| song     | varchar(150)  | YES  |     | NULL    |                | 
| albumurl | varchar(500)  | YES  |     | NULL    |                | 
| username | varchar(150)  | YES  |     | NULL    |                | 
| filesize | varchar(9999) | YES  |     | NULL    |                | 
+----------+---------------+------+-----+---------+----------------+

所以我不希望出现同一张专辑的多个副本。希望有人理解并能够至少给我一些提示。

3 个答案:

答案 0 :(得分:2)

简单攻击MYSQL的内部属性GROUP BY

  

SELECT * FROM songs GROUP BY album_title

这将生成一个包含不同album_title的歌曲表,并且相应于album_title显示的歌曲取决于MYSQL表索引(B + Tree)和所有。

GROUP BY的属性 - 如果有多个组副本,则将它们合并为一个副本,并允许您处理聚合值

  

SELECT *,count(*)as numsongs FROM songs GROUP BY album_title

这将为您提供每张专辑中的歌曲数量

答案 1 :(得分:1)

我没有专门针对MySQL的经验,但试试这个:

SELECT DISTINCT
    albums.albumurl
    ,albums.album
    ,(SELECT song FROM musicinfo WHERE album = albums.album ORDER BY song ASC LIMIT 0,1) AS firstsong
FROM musicinfo AS albums

(SELECT song FROM musicinfo WHERE album = albums.album ORDER BY song ASC LIMIT 0,1)是一个子查询,它将按字母顺序选择相册中的第一首歌。

我真的希望MySQL允许在表名上使用别名。

答案 2 :(得分:-1)

如果您想为每个专辑只显示一首歌曲,则必须更改在您的页面加载时执行的SQL查询。

您可以使用例如DISTINCT语句:http://www.w3schools.com/sql/sql_distinct.asp