我想選擇room_id基于列的user_id和del
| 房間編號 | 用戶身份 | 德爾 |
|---|---|---|
| 1 | 23 | 0 |
| 1 | 45 | 0 |
| 1 | 56 | 1 |
| 25 | 23 | 0 |
| 25 | 45 | 0 |
| 25 | 56 | 0 |
這是我的表的一個例子,我想選擇 room_id WHERE:
"user_id = 23 AND del = 0" (del of the row where user_id=23)
和
"user_id = 45 AND del = 0" (del of the row where user_id=45)
和
"user_id = 56 AND del = 0" (del of the row where user_id=56)
查詢應該只回傳room_id = 25
如何使用 PHP 或 CodeIgniter 實作這一點?
我試過使用它,但它不起作用:
$this->db->select()
->from('table')
->where(['user_id' => 23, 'del' => 0])
->where(['user_id' => 45, 'del' => 0])
->where(['user_id' => 56, 'del' => 0])
->get()->result_array();
*注意:當我嘗試在同一個表上使用連接表時它有效,但是當我有 10 個user_id(連接同一個表 10 次)時,查詢運行速度非常慢(因為它是一個幾乎接近一百萬行的大表) .
先感謝您。
uj5u.com熱心網友回復:
使用where子句過濾匹配的行,然后對結果進行分組并添加一個帶有子句:
SELECT room_id
FROM t
WHERE (user_id = 23 AND del = 0)
OR (user_id = 45 AND del = 0)
OR (user_id = 56 AND del = 0)
GROUP BY room_id
HAVING COUNT(*) = 3 -- there are three rows with matching condition for that room
uj5u.com熱心網友回復:
你可以這樣試試
SELECT room_id
FROM table
WHERE user_id = 23 AND del = 0 AND user_id = 45 AND del = 0 AND user_id = 56 AND del = 0;
然后查詢可能看起來像這樣
$this->db->select('room_id')
->from('table')
->where(['user_id' => 23, 'del' => 0])
->orWhere(['user_id' => 45, 'del' => 0])
->orWhere(['user_id' => 56, 'del' => 0])
->get()->result_array();
uj5u.com熱心網友回復:
您可以將所有user_ids 放在括號中:
SELECT room_id
FROM table
WHERE (user_id = 23 OR user_id = 45 OR user_id = 56) AND del = 0;
或者您可以使用該WHERE IN條款:
SELECT room_id
FROM table
WHERE user_id IN (23, 45, 56) AND del = 0;
uj5u.com熱心網友回復:
“user_id = 23 AND del = 0”也會將房間 ID 1 添加到結果集中。 在 where 子句中添加 room_id = 25 的條件。
uj5u.com熱心網友回復:
SELECT room_id
FROM
(
SELECT `room_id`,`user_id`,`del`,GROUP_CONCAT(user_id ORDER BY user_id ASC) ordered_user
FROM `my_table`
GROUP BY room_id,del
HAVING ordered_user = "23,45,56" AND del=0
)
AS dbx
說明:
您的資料:

按 Room_id 和 Del 分組之后,在ordered_user 中按 HAVING 過濾

制作新假人僅回傳 25

uj5u.com熱心網友回復:
更簡單的方法是:
SELECT room_id
FROM table_tbl
WHERE user_id in (23,45,56) AND del = 0
GROUP BY room_id
HAVING COUNT(*) = 3 ;
演示:https : //www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/60
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315065.html
