gpt4 book ai didi

php - 从我的帖子表中的每个类别中选择最后 4 行

转载 作者:可可西里 更新时间:2023-11-01 08:39:57 26 4
gpt4 key购买 nike

我的博客应用程序有一个帖子表。

表结构:

post_id  post_title  post_description category_id created_time status

我想从我的表格中选择每个类别的最后 4 个帖子。我怎么做。我正在使用 mysql 数据库。

最佳答案

您可以尝试以下查询:

我假设你的表名是 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;

SQL FIDDLE DEMO

注意:如果您想从每个类别中获取最新的 5 条记录,则只需更改以下行,如下所示:

WHERE t.SL < 5;

解释:

  1. 首先根据category id对行进行排序这样行属于同一类别的人在一起。
  2. 然后根据 created_time 对其进行排序DESC .
  3. 现在您得到了一个结果集,其中的行根据 category_idcreated_time DESC .
  4. 现在分配一个标志值,它将指示相应的帖子在每个类别中的位置。 (在这种情况下这个标志值 SL0 开始).如果您在同一类别下看到一行,那么只需分配 SL 的下一个值给它。如果你看到下面有一行不同的类别 (i.e. new category)然后重置值 SL0 .
  5. 执行上述操作,您最终会得到行所在的结果根据 category_id 和 created_time DESC 以及在结果集中有相应位置的标志值( SL )。
  6. 现在,如果您过滤标志值 (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;

Demo of this query only

请检查SL每行的值。我希望你会得到它。

关于php - 从我的帖子表中的每个类别中选择最后 4 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com