[英]MySQL select multiple id at the same time with php
我有以下 MySQL 表稱為技能。
ID | 用戶名 | 技能 |
---|---|---|
1 | 4 | 1 |
2 | 8 | 4 |
3 | 8 | 9 |
4 | 13 | 9 |
5 | 18 | 2 |
6 | 22 | 1 |
7 | 27 | 2 |
8 | 32 | 4 |
9 | 11 | 2 |
10 | 32 | 9 |
例如,我需要選擇同時具有 idSkill 4 和 9 的所有 idUser。
結果將是 idUser 8 和 32。
如何使用 PHP 和 MySQL 創建這樣的查詢?
非常感謝
一種簡單的方法使用聚合:
SELECT idUser
FROM skills
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING MIN(idSkill) <> MAX(idSkill);
上面的查詢是sargable ,這意味着適當的索引可以使用idSkill
列。 考慮添加此索引以提高性能:
CREATE INDEX idx ON skills (idUser, idSkill);
編輯:
將此查詢用於 3 個項目:
SELECT idUser
FROM skills
WHERE idSkill IN (2, 4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 3;
你可以試試這個查詢。 只需選擇 userIds 並添加 GROUP BY 以避免重復的 userIds,如果您使用更多的技能 ID,例如 (4,9,2) 然后將 HAVING COUNT 更改為 3 等等。
SELECT idUser FROM your_table
WHERE idSkill IN (4, 9)
GROUP BY idUser
HAVING COUNT(DISTINCT idSkill) = 2
另一種解決方案:
SELECT DISTINCT idUser
FROM tablename t0
WHERE EXISTS ( SELECT NULL
FROM tablename t1
WHERE t0.idUser = t1.idUser
AND t1.idSkill = 4 )
AND EXISTS ( SELECT NULL
FROM tablename t2
WHERE t0.idUser = t2.idUser
AND t2.idSkill = 9 )
如果idSkill
值列表包含 2 個以上的值,則可以通過添加更多AND EXISTS ()
塊來擴展該解決方案。
這個查詢是可查詢的。 小提琴
您可以使用以下MYSQL
查詢進行檢查:
SELECT DISTINCT(idUser) FROM skill WHERE idSkill IN(4,9)
試試這個:
SELECT DISTINCT(idUser) FROM skills
WHERE idSkill = 4 and idUser IN(select idUser from skills where idSkill = 9)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.