[英]nested sql query which is grouped by and limited rows returned for each group
Trying to get the right query to look through my table which looks like this: 试图获取正确的查询以查看我的表,如下所示:
id fromName toName messages
1 user1 me .......
2 user2 me .......
3 user1 me .......
4 user1 me .......
5 user3 me .......
6 user2 me .......
What I want to do is get an array which has all the messages from user1 in an array, user2 in an array, user3...etc. 我想做的是获取一个数组,其中包含来自user1数组中的所有消息,来自user2数组中的,user3 ...等的所有消息。 I had a query that did that:
我有一个查询做到这一点:
$query = mysqli_query($link, "SELECT * FROM messages WHERE toName='$to' OR fromName='$to' order by id desc");
$messages = array();
while ($row = mysqli_fetch_assoc($query)) {
$messages[$row['fromName']][] = $row;
}
Now I want to put a limit on how many rows it gets back...for example a limit of 2 rows from all users. 现在,我想对它返回的行数设置一个限制...例如,所有用户的限制为2行。 Do I need a nested query using "group by"?
我是否需要使用“分组依据”的嵌套查询? This query isn't working:
该查询不起作用:
$query = mysqli_query($link, "SELECT * FROM messages WHERE toName='$to' OR fromName='$to' group by fromName order by id desc limit 2");
//or this one
$query = mysqli_query($link, "SELECT * FROM messages WHERE toName='$to' OR fromName='$to' AND id IN(SELECT * FROM messages group by fromName)");
$messages = array();
while ($row = mysqli_fetch_assoc($query)) {
$messages[$row['fromName']][] = $row;
}
Hope this isn't too difficult to solve....Thanks in advance! 希望这不太难解决。。。谢谢!
Why not use your original query and run a count on the array before assigning another. 为什么不使用原始查询并在分配另一个数组之前对数组进行计数。
if(count($messages[$row['fromName']]) < 2)
$messages[$row['fromName']][] = $row;
}
You should really use GROUP BY
in your query to get results. 您应该在查询中真正使用
GROUP BY
以获得结果。 You will not need to iterate through the results and formulate an array. 您将不需要遍历结果并制定一个数组。
Updated code: 更新的代码:
$query = mysqli_query($link, "SELECT * FROM messages WHERE toName='$to' OR fromName='$to' GROUP BY fromName");
$senderMessages = mysqli_fetch_assoc($query);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.