2017-02-12 56 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 - 没有采取,相同的想法。 –