2017-02-12 60 views
0

所以,我有2個表,release和release_favourites。sql order by and limit by another value

剝離結構:

id date (timestamp) other data 
    1  1486901083   ... 
    2  1486909903   ... 
    .... 

release_favourites結構:

id releaseId userId 
    1  2   5 
    2  2   10 
    .... 

我要訂購按日期記錄,但我想只有10條記錄與大多數(你可以在SQL看不了的問題)最喜歡的,這可能嗎?

(SQL下面的作品,但僅限於按日期排序)

SELECT [some rows] 
FROM release AS a, release_favourites AS b 
WHERE a.id = b.releaseId 
ORDER BY a.date 
+0

(1)標籤與正在使用的數據庫你的問題。 (2)*從不*在'FROM'子句中使用逗號。 *總是*使用正確的,明確的'JOIN'語法。 (3)編輯你的問題並顯示想要的結果。 –

+0

@GordonLinoff爲什麼不使用'[table] AS a'? – nacelnikpohodar

回答

0
SELECT DISTINCT [some rows] 
FROM release 
WHERE id IN (
     SELECT releaseId 
     FROM (
       SELECT releaseId 
       FROM release_favourite 
       GROUP BY releaseId 
       ORDER BY count(*) 
       DESC LIMIT 10 
     ) 
     AS tmp 
) 
ORDER BY date 
0

從你的描述,你要GROUP BY。你只顯示一個表格(儘管你的查詢有兩個)。這是一個(合理的)猜測你想要什麼:

select rf.release_id 
from release_favourites rf 
group by rf.release_id 
order by count(*) desc 
fetch first 10 rows only; 

您可以在任何領域,你實際上是從另一個表要加入(或使用inexists)。並非所有數據庫都支持ANSI標準fetch first 10 rows only語法。但是,所有方法都可以將結果集限制爲給定數量的行。

1
select  * 

from  release 

where  id in 
      (
       select  releaseid 
       from  release_favourites 
       group by releaseid 
       order by count(*) desc 
       limit  10 
      ) 

order by date 
+0

這有效,但我不能在子查詢中使用限制:'這個MariaDB版本還不支持'LIMIT&IN/ALL/ANY/SOME子查詢' – nacelnikpohodar

+0

@nacelnikpohodar。 。 。杜杜沒有冒犯,但你爲什麼會接受答案,然後評論說它不起作用? –

+0

@GordonLinoff - 沒有采取,相同的想法。 –