如何为每个外键选择有限数量的行? (以及如何指定关系)

时间:2010-05-03 21:46:40

标签: sql mysql

最近我发布了this question,现在我想要相同的查询,但只有一个关系。

现在我有“feeds”表和“feed_entries”表。我想要每个类别有限的行数。 上面的查询使用了一个带有category_id字段的表:

SELECT x.* FROM (SELECT t.*, 
CASE WHEN @cat != t.category_id THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank, 
@cat := t.category_id 
FROM feed_entries t 
JOIN (SELECT @rownum := NULL, @cat := 0) r 
ORDER BY t.category_id DESC) x 
WHERE x.rank <= 3 AND x.deleted =0 ORDER BY x.category_id, x.date DESC LIMIT 50

但是我需要使用“feeds”表中的f.category_id而不是t.category_id。 如何在此查询中指定关系?

1 个答案:

答案 0 :(得分:0)

知道了。实际上这个sql是我测试的第一个,但是因为我在CASE clausule之前忘记了逗号而出现了错误。

正确的是:

SELECT x . *
FROM (
SELECT t . * , f.categoria_id AS idCategoria,
CASE WHEN @cat != f.categoria_id
THEN @rownum :=1
ELSE @rownum := @rownum +1
END AS rank, @cat := f.categoria_id AS catteste
FROM feed_entries t, feeds f
JOIN (
SELECT @rownum := NULL , @cat :=0
)r
WHERE t.feed_id = f.id
ORDER BY f.categoria_id DESC
)x
WHERE x.rank <=3
AND x.deleted =0
ORDER BY x.categoria_id, x.date DESC
LIMIT 50