簡體   English   中英

首先通過最新對話訂購MySQL收件箱?

[英]Order MySQL inbox by newest conversation first?

我為自己構建的專用消息傳遞系統提供了MySQL / PHP代碼。 盡管我對它還很陌生,但它卻很難使消息線程顯示在最新的位置,因此效果很好。 您有機會提供建議嗎? 當前代碼如下:

$result = '';

$nowTime = time();

$getmessages = mysql_query("SELECT * FROM messages WHERE msg_to = '$session_memberid' GROUP BY msg_from ORDER BY ID DESC");
while($iamessages = mysql_fetch_array($getmessages))
{
$msg_id = $iamessages['ID'];
$msg_from = $iamessages['msg_from'];
$msg_conversation = $iamessages['conversation'];



$getmsgdata = mysql_query("SELECT * FROM messages WHERE msg_to = '$session_memberid' AND msg_from = '$msg_from' ORDER BY ID DESC LIMIT 1");
while($imsd = mysql_fetch_array($getmsgdata))
{
$msg_message = $imsd['msg_message'];
$msg_time = $imsd['time'];
$msg_read = $imsd['msg_read'];
}

$msg_conversation = suitcrypt($msg_conversation);

if ( $msg_read == 'no' ) { $msgclass = "messagepostunread"; } else { $msgclass = "messagepost"; }

$getfromdata = mysql_query("SELECT FullName, Username, status FROM members WHERE ID = '$msg_from'");
while($ifd = mysql_fetch_array($getfromdata))
{
$msg_from_name = $ifd['FullName'];
$msg_from_username = $ifd['Username'];
$msg_from_status = $ifd['status'];
}

$getfromdata1 = mysql_query("SELECT Link FROM images WHERE MemberID = '$msg_from' AND is_primary = 'yes'");
while($ifd1 = mysql_fetch_array($getfromdata1)) {
$msg_from_img = $ifd1['Link'];
}

$timepass = timing($msg_time);
if ( $timepass == 'data' ) {
$timepass = date("dS M", $msg_time);
}

if ( ( $msg_from_status == 'full' ) || ( $msg_from_status == 'active' ) ) {

$result .= "
        <div class=\"$msgclass\" onclick=\"showconversation('$msg_conversation');\">
        <img src=\"m/members_image/$msg_from/thumb-$msg_from_img\" class=\"feedpic\" width=\"55\" height=\"55\" /><div class=\"messageposttext\"><a href=\"/$msg_from_username\">$msg_from_name</a>:<div class=\"inboxfeedreply\">Reply &nbsp; &middot; &nbsp; $timepass</div><br />$msg_message</div>
        </div>
        <div class=\"splittermessages\"></div>
";
}

消息表中的每個表條目中都有一個“時間戳”。 以下是時間輸入的示例:1367680391。按最新回復順序排序線程的最佳方法是什么?

首先,我認為您應該按$ msg_conversation分組,並找到每次對話的最后日期。 使用下面的代碼,可以使每個會話/線程擁有的最后一條消息按順序排列會話。

$result = '';

$nowTime = time();

$getmessages = mysql_query("SELECT conversation, max(date) FROM messages WHERE msg_to = '$session_memberid' GROUP BY conversation ORDER BY max(date)");
while($iamessages = mysql_fetch_array($getmessages))
{
$msg_conversation = $iamessages['conversation'];
...

進一步,您可以按日期降序獲取每個對話的消息。

我找人幫忙,答案是將查詢更新為以下內容:

$getmessages = mysql_query("SELECT * FROM messages WHERE msg_to = '$session_memberid' GROUP BY msg_from ORDER BY MAX(time) DESC");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM