Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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
Mysql 选择带有COUNT和HAVING BY的查询_Mysql_Sql - Fatal编程技术网

Mysql 选择带有COUNT和HAVING BY的查询

Mysql 选择带有COUNT和HAVING BY的查询,mysql,sql,Mysql,Sql,如何修改下面的查询以限制每个userid从post\u列表表中获取的行数,而不影响脚本的性能(这里post\u列表表超过10000行) 我需要每个帖子列表最多5篇帖子。userid. 因此,如果我的post_列表表中有10个用户,查询将返回50行 编辑: 用户表 id username 1 bill 2 mark 3 kate post_id userid post 1

如何修改下面的查询以限制每个
userid
post\u列表
中获取的行数,而不影响脚本的性能(这里post\u列表表超过10000行)

我需要每个帖子列表最多5篇帖子。userid.

因此,如果我的post_列表表中有10个用户,查询将返回50行

编辑:

用户表

  id        username
   1          bill
   2          mark
   3          kate
 post_id    userid    post 
   1           1       foo
   2           3       bar
   3           3       baz
   4           1       qux
   5           1       foo_1
   6           1       bar_1
   7           1       baz_1
   8           1       qux_1
后列表表

  id        username
   1          bill
   2          mark
   3          kate
 post_id    userid    post 
   1           1       foo
   2           3       bar
   3           3       baz
   4           1       qux
   5           1       foo_1
   6           1       bar_1
   7           1       baz_1
   8           1       qux_1
在这里,查询应该只返回Bill的5个帖子

另外,我需要将行的总数限制为50

使用


正如您所评论的,您可以看看这篇文章,它将详细解释如何在SQL中选择每个组的第一行/最少行/最大行。

使用



正如您所评论的,您可以看看这篇文章,它将详细解释如何在SQL中选择每个组的第一行/最少行/最大行。

您可以通过分组和计数来完成此操作。请尝试此查询

$sql = query("SELECT userid, post, post_id,username, wish_likes FROM post_list, 
users WHERE post_list.userid = users.id AND post_id%4 = 0 group by userid,post,   
 post_id,username, wish_likes having 
count(post_id) <= 5 ORDER BY post_id"); 
$sql=query(“从post\u列表中选择userid、post、post\u id、username、wish\u likes,
用户,其中post_list.userid=users.id和post_id%4=0按用户id分组,post,
post\u id、用户名、希望\u喜欢

count(post_id)您可以按分组和计数进行此操作。请尝试此查询

$sql = query("SELECT userid, post, post_id,username, wish_likes FROM post_list, 
users WHERE post_list.userid = users.id AND post_id%4 = 0 group by userid,post,   
 post_id,username, wish_likes having 
count(post_id) <= 5 ORDER BY post_id"); 
$sql=query(“从post\u列表中选择userid、post、post\u id、username、wish\u likes,
用户,其中post_list.userid=users.id和post_id%4=0按用户id分组,post,
post\u id、用户名、希望\u喜欢
计数(post_id)
例如:



示例:

这是否总共只返回5行?我想他正在寻找每个用户5行的组idif I添加限制5;我最终得到了表中保存的最后5篇文章。我需要选择每个用户最后5篇文章。@ChHr如果不需要,这是否总共只返回5行?我想他正在寻找每个用户5行的组idif I添加限制5;最后,我得到了表中保存的最后5篇文章。我需要为每个用户选择最后5篇文章。@ChHr than you need+1谢谢,我忘了提到:我如何限制返回的总行数?如果我有100个用户,此查询将获得500个结果。我想将总结果限制为50行。对于总限制行数,我们必须在查询结束时使用limit,但这取决于您希望查询选择的行数或用户数。我尝试过多次此查询,但都不起作用。它不限制每个用户ID的行数,而是获取所有行数。您面临的问题是什么。能否发布表结构。请做一件事。尝试一下。“从post_列表中选择用户id,其中post_列表.userid=users.id和post_id%4=0的用户按具有计数(post_id)的用户id分组”限制select和in group中的列数,然后直接在phpmyadmin+1中尝试。谢谢,我忘了提到:如何限制返回的总行数?如果我有100个用户,此查询将获取500个结果。我希望将总结果限制为50行。对于总限制行,我们必须在查询结束时使用limit,但是取决于您希望查询选择的行数或用户数。我已经尝试了多次此查询,但它不起作用。它不限制每个用户ID的行数,而是获取所有行数。您面临的问题是什么。是否可以发布表结构。请做一件事。尝试此操作。“从post_列表中选择用户id,其中post_列表中的用户id.userid=users.id和post_id%4=0按具有计数的用户id分组(post_id)限制SELECT和in group中的列数,然后直接在phpmyadmin+1中尝试。您能告诉我这行子字符串索引是什么吗(group_CONCAT(post_id按post_id描述的顺序),',',5)”是吗?
GROUP\u CONCAT-CONCAT all post\u id per user(99,36,22,21,19,14,2)SUBSTRING\u INDEX-取前5个id(99,36,22,21,19)
+1它起作用了!我如何确保总体顺序是通过post\u id DESC(例如,在sqlfiddle中,结果顺序应该以qu1开头,然后是baz\u 1等)?我编辑了我的帖子,但无法在sqlfriddle中编辑示例,因为站点已关闭:)+1您能告诉我这行子字符串索引(GROUP_CONCAT(post_id ORDER BY post_id DESC),',',,5)有什么作用吗?
GROUP_CONCAT-CONCAT all post_id per user(99,36,22,21,19,14,2)子字符串索引-取前5个id(99,36,22,21,19)
+1它是有效的!我如何确保总体顺序是按post_id DESC确定的(例如,在SQLFIDLE中,结果顺序应该以qux_1开始,然后是baz_1等)?我编辑了我的帖子,但无法编辑SQLFRIDLE中的示例,因为网站已关闭:)