2017-02-09 33 views
2

我有一個我正在使用的php聊天系統。我遇到了一個問題,即查詢語句來抓取消息,選擇它們,將它們按發送到和來自的兩個用戶進行分組,然後輸出html。PHP聊天系統MySQL數據庫通過datesent sql order

現在它只是在用戶去選擇聊天時從第一個聊天ID開始輸出到最後一個ID。

我想按照最近的最近一次聊天對它進行排序,因爲從現在開始,它將從發送消息到發送消息的最後一個用戶的第一個用戶的頂部到底部。例如,如果「用戶1」一段時間沒有發送消息,即使「用戶6」發送了8個新聊天,該用戶將始終是查詢語句要輸出的第一個,「用戶6」仍然是列表中最後一個選擇,這應該是相反的,最新的聊天組應該顯示在最上面。我只是不知道如何用我的SQL查詢做到這一點。

我目前的查詢語句是:

$queryall = "SELECT DISTINCT mfrom FROM chat WHERE mto='user2'"; 

我知道它的編碼錯誤的,我想要什麼,我已經嘗試了很多不同的東西,似乎無法得到它做我想做的。我試過按日期排序並將它們分組,但是沒有任何工作。我相信DISTINCT不允許我根據我不熟悉的語法來做它。

mysql database row

User2 chat view

+0

你給這裏環境而言,幾乎沒有。專注於**代碼**,而不是傳達演示文稿的圖像。另外[SQL Server](https://www.microsoft.com/en-ca/sql-server/sql-server-2016)是Microsoft的產品,與MySQL無關。 – tadman

+0

感謝您對標籤的建議。至於代碼,這是不需要的,因爲sql語句完成所有工作。您正在尋找的代碼我認爲是以HTML格式輸出的代碼,與從sql數據庫中獲取信息無關。上下文在描述中。我需要修正我的查詢語句,以便抓取最近發送的所有用戶聊天內容。如果用戶一週前發送了聊天,並且用戶6剛剛發送了聊天,則用戶6應該在輸出中出現在用戶1上方,如上所述。 –

+0

在這個問題中有很多詞彙,並且沒有太多代碼,也沒有問題,據我所知。你能把它煮成更小的東西嗎? – tadman

回答

2

你只需要一個簡單的ORDER BY

$queryall = "SELECT DISTINCT mfrom FROM chat WHERE mto='user2' ORDER BY datesent DESC"; 

這令你的結果通過datesentDESC(降序)設置(最新到最舊的日期時/ datetime列)。

當你的用戶擁有多條消息,您可能需要使用的GROUP BY代替DISTINCT

$queryall = "SELECT mfrom FROM chat WHERE mto='user2' GROUP BY mfrom ORDER BY MAX(datesent) DESC"; 
+0

這就是我想的,但phpmyadmin給我這個。SQL查詢:文檔 SELECT mfrom FROM聊天WHERE MTO = '用戶2' ORDER BY datesent DESC GROUP BY mfrom LIMIT 0,25 MySQL表示:文件 #1064 - 你在你的SQL語法錯誤;檢查與你的MySQL服務器版本相對應的手冊,在第1行'GROUP BY mfrom LIMIT 0,25'附近使用正確的語法 –

+0

我的不好 - GROUP BY在ORDER BY之前。 –

+0

MySQL說:文檔 #1055 - ORDER BY子句的表達式#1不在GROUP BY子句中,幷包含非聚集列'chatdb.chat.datesent',它在功能上不依賴於GROUP BY子句中的列;這是不符合sql_mode = only_full_group_by –