Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库中为每个id检索最后3条记录_Php_Mysql_Pdo - Fatal编程技术网

Php 从数据库中为每个id检索最后3条记录

Php 从数据库中为每个id检索最后3条记录,php,mysql,pdo,Php,Mysql,Pdo,我想根据分类id从数据库中检索最后三篇文章,例如 post_id category_id 1 1 2 4 3 3 4 4 5 2 6 1 7 3 8 2 9

我想根据分类id从数据库中检索最后三篇文章,例如

post_id         category_id
   1                 1
   2                 4
   3                 3
   4                 4
   5                 2
   6                 1
   7                 3
   8                 2
   9                 4
  10                 1
  11                 2
  12                 3
我想重温一下这样的事情

post_id         category_id
   1                 1
   6                 1
  10                 1
   5                 2
   8                 2
  11                 2
   7                 3
   3                 3
  12                 3
   4                 4
   2                 4
   9                 4
我已经做了这个查询,但是如何限制返回每个类别的3个id

SELECT
     `posts`.`id`,
     `posts`.`title`,
     `posts`.`slug`,
     `posts`.`image`,
     `posts`.`status`
FROM 
     `posts`
ORDER BY
     `posts`.`id`
当我使用limit 3查询仅返回3条记录时,如何限制每个类别\u id返回3条记录

$sql = "SELECT `posts`.* FROM `posts` WHERE `posts`.`category_id` = 1 ORDER BY `posts`.`id` DESC LIMIT 3"
那就开始吧

$sql = "SELECT `posts`.* FROM `posts` WHERE `posts`.`category_id` = 2 ORDER BY `posts`.`id` DESC LIMIT 3"
那就开始吧

$sql = "SELECT `posts`.* FROM `posts` WHERE `posts`.`category_id` = 3 ORDER BY `posts`.`id` DESC LIMIT 3"
那好吧,但别忘了

$sql = "SELECT `posts`.* FROM `posts` WHERE `posts`.`category_id` = 4 ORDER BY `posts`.`id` DESC LIMIT 3"`
那么你已经到达目的地了


最好只单独运行查询

您可以从每个类别id中读取3个新的帖子id

SELECT
    p1.`post_id`,
    p1.`category_id`
FROM
    post p1
JOIN post p2 ON p1.`category_id` = p2.`category_id`
AND p2.`post_id` >= p1.`post_id`
GROUP BY
    p1.`post_id`,
    p1.`category_id`
HAVING
    COUNT(*) <= 3
ORDER BY
    `category_id`,
    `post_id`
选择
p1.“post_id”,
p1.`类别识别号`
从…起
后p1
加入p1上的p2帖子。`category\u id`=p2。`category\u id``
p2.`post\u id`>=p1.`post\u id`
分组
p1.“post_id”,
p1.`类别识别号`
有

COUNT(*)例如,请参阅或其他数百个类似问题中的任何一个。您是否可以解释为什么单独运行查询比在一个查询中运行所有查询更好?当做Lol只要脚本正确完成任务,就有多种方法可以到达目的地。别再像机器人一样思考了,要有人性。