簡體   English   中英

嵌套的sql查詢,按組分組,並為每個組返回有限的行

[英]nested sql query which is grouped by and limited rows returned for each group

試圖獲取正確的查詢以查看我的表,如下所示:

id    fromName    toName    messages
1     user1       me        .......
2     user2       me        .......
3     user1       me        .......
4     user1       me        .......
5     user3       me        .......
6     user2       me        .......

我想做的是獲取一個數組,其中包含來自user1數組中的所有消息,來自user2數組中的,user3 ...等的所有消息。 我有一個查詢做到這一點:

$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;
}

現在,我想對它返回的行數設置一個限制...例如,所有用戶的限制為2行。 我是否需要使用“分組依據”的嵌套查詢? 該查詢不起作用:

$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;
}

希望這不太難解決。。。謝謝!

為什么不使用原始查詢並在分配另一個數組之前對數組進行計數。

if(count($messages[$row['fromName']]) < 2)
    $messages[$row['fromName']][] = $row;
}

您應該在查詢中真正使用GROUP BY以獲得結果。 您將不需要遍歷結果並制定一個數組。

更新的代碼:

$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