简体   繁体   English

嵌套的sql查询,按组分组,并为每个组返回有限的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM