php
  • mysql
  • 2013-05-17 47 views 0 likes 
    0

    我有一個我建立的私人消息系統的MySQL/PHP代碼。它很好用,儘管我對這一切都很陌生,所以努力讓消息線程以最新的方式顯示。有沒有機會提供建議?當前代碼如下:先通過最新會話訂購MySQL收件箱?

    $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.首先通過最新回覆排序線索的最佳方式是什麼?

    +0

    您是否嘗試過通過時間戳,而不是ID訂購? – Jim

    +0

    我看不出爲什麼你不只是'按時間順序排序'而不是'按順序排列順序排列'。我還會將表連接在一起,因爲對一個數據包的許多請求比一個好連接慢。 – flaschenpost

    +0

    我按時間順序嘗試了順序,但它似乎沒有改變任何東西:/它似乎總是按順序發送對話線程中的初始消息,而不是對話線程中的最新消息。 – EdzJohnson

    回答

    0

    首先,我認爲您應該按$ 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']; 
    ... 
    

    此外,您可以按日期降序獲取每個對話的消息。

    0

    我得到了別人幫助,答案是更新查詢到以下幾點:

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