我有一个博客应用程序的帖子表。
表格结构:
post_id post_title post_description category_id created_time status
我想从我的表格中选择每个类别的最后4个帖子。我怎么做。我使用的是mysql数据库。
答案 0 :(得分:1)
您可以尝试以下查询:
我认为您的表名是 BLOG
SELECT
t.post_title,
t.post_description,
t.category_id,
t.created_time
FROM
(
SELECT
*,
IF (@prev = category_id ,@cn := @cn + 1 ,@cn := 0) SL,
@prev := category_id
FROM blog,(SELECT @cn := 0, @prev := 0) var
ORDER BY category_id, created_time DESC
) t
WHERE t.SL < 4;
注意:如果您想从每个类别中获取最新的5条记录,则只需更改以下行,如下所示:
WHERE t.SL < 5;
<强>解释强>
category id
对行进行排序,以便行
属于同一类别的人保持在一起。created_time
DESC
对此进行排序。category_id
和created_time DESC
。SL
从0
开始。如果您在同一类别下看到一行,那么
只需为其分配SL
的下一个值。如果你看到一行
另一个类别(i.e. new category)
然后重置值
SL
至0
。SL
)在结果集中具有相应的位置。4
,您将获得这些记录
它们属于每个类别中的前4
条记录。以下查询涵盖了步骤1 to 5
(它是给定查询中的内部查询):
SELECT
*,
IF (@prev = category_id ,@cn := @cn + 1 ,@cn := 0) SL,
@prev := category_id
FROM blog,(SELECT @cn := 0, @prev := 0) var
ORDER BY category_id, created_time DESC;
请检查每行的SL
值。我希望你能得到它。
答案 1 :(得分:0)
您可以使用NOT EXISTS()
var dict = values.AsRef()
.Where(p => !string.IsNullOrEmpty(p.CustomSlug))
.ToDictionary(p => p.CustomSlug, p => p.ManufacturerID);
我不知道每行的唯一性,我假设是post_id。如果它也是post_title / category_id ETC,那么将它添加到group by子句和关系条件