簡體   English   中英

MySQL用php同時選擇多個id

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM