我有2個表來表示一個對話,我認爲這是一個非常標準的格式。休眠查詢獲取2個用戶之間的現有對話
CREATE TABLE conversation (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(40) DEFAULT '',
last_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id)
) ENGINE = InnoDB;
CREATE TABLE conversation_user (
user_id INT NOT NULL,
conversation_id INT NOT NULL,
conversation_is_visible BOOLEAN NOT NULL DEFAULT TRUE,
unread BOOLEAN NOT NULL DEFAULT TRUE,
PRIMARY KEY (user_id, conversation_id),
CONSTRAINT fk_conversation_user_user_id FOREIGN KEY (user_id) REFERENCES user (id),
CONSTRAINT fk_conversation_user_conversation_id FOREIGN KEY (conversation_id) REFERENCES conversation (id)
) ENGINE = InnoDB;
我希望能夠檢查用戶(我不關心開始一個新的對話超過2級的用戶,如果它已經存在)之間存在的對話。
我似乎無法編寫查詢來選擇只有2個給定用戶的對話,也沒有更多。 然後我想將查詢轉換成一個hibernate查詢。
例如如果我有如下的數據:
select * from conversation;
+----+------------------------+---------------------+
| id | name | last_modified |
+----+------------------------+---------------------+
| 1 | test conversation 1 | 2017-02-25 15:39:01 |
| 2 | test conversation 2 | 2017-02-26 16:29:14 |
+----+------------------------+---------------------+
select * from conversation_user;
+---------+-----------------+-------------------------+--------+
| user_id | conversation_id | conversation_is_visible | unread |
+---------+-----------------+-------------------------+--------+
| 1 | 1 | 1 | 0 |
| 1 | 2 | 1 | 0 |
| 2 | 1 | 1 | 1 |
| 2 | 2 | 1 | 0 |
| 3 | 2 | 1 | 0 |
+---------+-----------------+-------------------------+--------+
查詢應針對用戶1和用戶2之間的通話搜索時只有交談1示出了,作爲會話2具有用戶3在它藏漢。
我試過下面的查詢,但顯示了雙方的對話,所以不知道如何將它限制爲只包含這些用戶的對話......
SELECT * FROM conversation
LEFT JOIN conversation_user ON conversation.id = conversation_user.conversation_id
WHERE user_id IN (1,2);
我可以在休眠使用此查詢和然後檢查組談話用戶在對話,以確保對話只包含2級中給出的用戶,但不知道是否有一個更有效的方法
一些示例數據和預期的輸出示例將是巨大的。 – Utsav
到目前爲止你的最大努力 – Strawberry
@Utsav已更新的問題,謝謝:) – beerye