問題的標題可能聽起來很奇怪,但用我的英語不能得到更好的標題。如何向後運行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」停下來看看,如果「看到」爲空或不是。
你只是在尋找'ORDER BY'關鍵字在SQL?您可以更改結果的排序順序,然後限制結果,從而有效地爲您提供查詢的「最後匹配記錄」。 – David
LIMIT是你想要使用的,你也可以通過只選擇某些列來減少壓力。然後只是'返回($ count> 0);'。 – kyle
我認爲我的問題因缺乏MySQL如何執行查詢的知識而增加。 ORDER BY是從最後一行開始直到第一行,還是從第一行開始到最後一行,然後對結果進行排序?我正在尋找第一個 - 從最後開始,向上移動並停止加工條件。我不想通過第一個999 990行循環,因爲我已經知道我不需要它們 –