簡體   English   中英

MySQL同時選擇多個id,可選id with php

[英]MySQL select multiple id at the same time with optional id 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
10 32 7

例如,我需要選擇同時具有 idSkill 4 和 9(強制技能)的所有 idUser。

但我希望有可能通過可選的 idSkills(如果有)進行搜索。

必修技能是 9 和 4

可選技能為7

結果將是 idUser 32。

我想到了這個查詢:

SELECT id, idUser, idSkill FROM skills WHERE idSkill IN (9,4,7) GROUP BY idUser HAVING (idSkill IN (9,4))

但它顯然不起作用。

非常感謝

您可以使用聚合和RANK()窗口函數來實現。

這個查詢:

SELECT idUser
FROM skills 
WHERE idSkill IN (9, 4, 7) 
GROUP BY idUser 
HAVING SUM(idSkill IN (9, 4)) = 2 -- for the 2 mandatory skills

返回至少具有 2 項強制性技能 9 和 4 的所有用戶。

如果像這樣使用帶有LIMITORDER BY子句:

SELECT idUser
FROM skills 
WHERE idSkill IN (9, 4, 7) 
GROUP BY idUser 
HAVING SUM(idSkill IN (9, 4)) = 2 -- for the 2 mandatory skills
ORDER BY COUNT(*) DESC
LIMIT 1

您將從所有擁有至少 2 個強制技能 9 和 4 的用戶那里獲得,只有 1 個用戶:擁有最多技能(強制和可選)的用戶。

如果您想返回RANK() ,請使用RANK()窗口函數:

SELECT idUser
FROM (
  SELECT idUser, RANK() OVER (ORDER BY COUNT(*) DESC) rnk
  FROM skills 
  WHERE idSkill IN (9, 4, 7) 
  GROUP BY idUser 
  HAVING SUM(idSkill IN (9, 4)) = 2 -- for the 2 mandatory skills
) t
WHERE rnk = 1

請參閱演示

您的回答將是一個簡單的查詢。

select * from (select distinct b.idUser, (select 1 from Skill a where a.idUser=b.idUser and a.idSkill=4) 'four', (select 1 from Skill a where a.idUser=b.idUser and a.idSkill=9) 'nine', (從技能 a 中選擇 1,其中 a.idUser=b.idUser 和 a.idSkill=7) 來自技能 b) t 中的 'seven',其中 t.four=1 和 t.nine= 1 和 t.seven=1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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