所以,我有2个表,release和release_favourites。
发布结构:
id date (timestamp) other data
1 1486901083 ...
2 1486909903 ...
....
release_favourites结构:
id releaseId userId
1 2 5
2 2 10
....
我想按日期订购记录(没有问题,你可以在SQL中看到),但我只想要10条最喜欢的记录,这可能吗?
(下面的SQL有效,但仅适用于按日期排序)
SELECT [some rows]
FROM release AS a, release_favourites AS b
WHERE a.id = b.releaseId
ORDER BY a.date
答案 0 :(得分:1)
select *
from release
where id in
(
select releaseid
from release_favourites
group by releaseid
order by count(*) desc
limit 10
)
order by date
答案 1 :(得分: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;
您可以从其他表中加入您真正想要的任何字段(或使用in
或exists
)。并非所有数据库都支持ANSI标准fetch first 10 rows only
语法。但是所有人都有办法将结果集限制为给定的行数。
答案 2 :(得分: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