2012-03-20 81 views
1

我有一个表有以下栏目:Mysql的多个子查询限制

playlistid 
trackname 
playstatus 
likes 
dislikes 
created 

playstatus可以有以下值:0, 1, 2 and 4

,即时通讯现在使用SQL查询:

SELECT * from playlist 
WHERE playlistid=$myplaylistid && playstatus=0 
ORDER BY (likes-dislikes) DESC, created ASC 

其值得一提的是始终有只将一排与playstatus = 1,一排用playlistid = 3,但会有playstatus = 0和2的多行。

我想要改变上面的查询,以便从playstatus = 3的位置获得1行,从playstatus = 1的位置获得1行,以及从playstatus = 0的位置获得3行单个查询。所有这些都必须根据您在上述查询中看到的相同顺序进行选择。

所有帮助表示赞赏!感谢您的时间!

回答

1

尝试此查询

SELECT * from playlist WHERE playlistid=$myplaylistid && playstatus=1 
ORDER BY (likes-dislikes) DESC, created ASC limit 1 
union 
SELECT * from playlist WHERE playlistid=$myplaylistid && playstatus=3 
ORDER BY (likes-dislikes) DESC, created ASC limit 1 
union 
SELECT * from playlist WHERE playlistid=$myplaylistid && playstatus=0 
ORDER BY (likes-dislikes) DESC, created ASC limit 3 
+0

你忘了一些括号,但除此之外,它的工作就像一个魅力。由于其他用户没有像你那样正确地读取问题,你会得到V.(我需要限制每个playstatus,以及每个playstatus的使用orderby)。 – 2012-03-20 13:44:39

1

试试这个

SELECT * from playlist WHERE playlistid=$myplaylistid && playstatus=3 
union 
SELECT * from playlist WHERE playlistid=$myplaylistid && playstatus=1 
union 
SELECT * from playlist WHERE playlistid=$myplaylistid && playstatus=0 
ORDER BY (likes-dislikes) DESC, created ASC