我有這些表:聊天在MySQL - 選擇 - GROUP BY
表名:USER_DATA
---------------------------
| id | owner | name |
---------------------------
| 1 | 120 | "Nicolas" |
| 2 | 140 | "Angel" |
---------------------------
表名:private_messages
--------------------------------------------
| id | ownerID | toUserID | message |
--------------------------------------------
| 1 | 120 | 140 | "Hi" |
| 2 | 120 | 140 | "How are you?" |
| 3 | 120 | 140 | "I miss u" |
| 4 | 140 | 120 | "Viewed." |
--------------------------------------------
,我需要選擇所有行聊天的用戶,例如,我有用戶ID「120」,我需要做一個查詢,返回所有通道在ownerID或toUserID中出現「120」的ats。
這是我的實際查詢:
SELECT
user_data.owner,
ANY_VALUE(user_data.name) name,
ANY_VALUE(private_messages.message) message
FROM private_messages
INNER JOIN user_data ON private_messages.ownerID = user_data.owner
WHERE private_messages.owner = "120" OR private_messages.toUserID = "120"
GROUP BY user_data.owner
結果這個疑問是:
----------------------------------------
| owner | name | message |
----------------------------------------
| 120 | "Nicolas" | "Hi" |
| 140 | "Angel" | "Viewed." |
----------------------------------------
但如果你認爲這是錯誤的,因爲這兩個元素是來自同一個聊天。正確的結果應該是兩個用戶之間的最後一條消息:
----------------------------------------
| owner | name | message |
----------------------------------------
| 140 | "Angel" | "Viewed." |
----------------------------------------
有沒有辦法做到這一點?
爲什麼你說需要所有的聊天,但隨後通過使用一組?然後你的預期結果是單排?請詳細解釋你的邏輯。 –
這只是這個表中的唯一兩個用戶,還是會有其他用戶ID?也許多一些信息會有所幫助...... – Kevin
爲什麼在'WHERE'子句中使用'OR',如果你需要消息屬於**兩個**用戶?你需要像private_messages.owner =「120」和private_messages.owner =「140」'。 – abcdn