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中的示例,因为网站已关闭:)