2016-11-09 69 views
0

問題的標題可能聽起來很奇怪,但用我的英語不能得到更好的標題。如何向後運行mysql查詢?

A在我的網站上創建了聊天應用程序。現在我想添加通知。

提交新消息時,我正在檢查其他用戶是否在給定的對話中讀取了以前的消息。如果他有,我寫一個新的通知。如果他以前沒有見過,我就不寫一個新的通知。

我使用mysql count()函數來計算字段,然後執行php邏輯。在CI它看起來像這樣:

public function ifUnreadMsgs($con_id, $sender_id) 
{ 
    $this->db->where('conversation_id', $con_id); 
    $this->db->where('sender_id', $sender_id); 
    $this->db->where('seen IS NULL', null, false); 
    $this->db->from('messages'); 
    $count = $this->db->count_all_results(); 

    if($count > 0){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

我的問題是關於優化。我知道隨着時間的推移,我會收到很多消息。比方說,我有1 000 000條消息存儲在數據庫中。我也知道在看到可能的「NULL」的那個將會帶有約爲msg_id的值。 999 995.我必須經常使用這個查詢,並且用戶等待ajax響應,所以我想盡可能減少查詢的時間。

是否有可能向後運行查詢並停止按我找到的值?我想過使用DISTICT或LIMIT關鍵字來停止,但如何向後運行?

編輯:

其實我需要開始通過郵件表循環,從最後一行開始,在「conversation_id」停下來看看,如果「看到」爲空或不是。

+0

你只是在尋找'ORDER BY'關鍵字在SQL?您可以更改結果的排序順序,然後限制結果,從而有效地爲您提供查詢的「最後匹配記錄」。 – David

+0

LIMIT是你想要使用的,你也可以通過只選擇某些列來減少壓力。然後只是'返回($ count> 0);'。 – kyle

+0

我認爲我的問題因缺乏MySQL如何執行查詢的知識而增加。 ORDER BY是從最後一行開始直到第一行,還是從第一行開始到最後一行,然後對結果進行排序?我正在尋找第一個 - 從最後開始,向上移動並停止加工條件。我不想通過第一個999 990行循環,因爲我已經知道我不需要它們 –

回答

0

您可以使用ORDER BY來升序&降序。默認情況下,ORDER BY從第一個開始,但您可以通過添加DESC來啓動它。請檢查this & that