我有下表:
n1|n2|n3|n4|n5
1| 5| 4| 7|26
26|80|75| 1|10
5| 3| 2| 1|4
45|26|88| 3|66
88|48| 1|69|90
我正在尝试获取显示5个指定值中的2个的行数。 例: 26,1和88。 在上表中,26和1出现在2行(第1和第2); 26和88出现在第1行(第4行); 88和1出现在第1行(第5行)。
我可以用
SELECT COUNT(*) FROM your_table
WHERE 1 IN (n1,n2,n3,n4,n5) OR 26 IN (n1,n2,n3,n4,n5) OR 88 IN (n1,n2,n3,n4,n5)
但这样我得到的行只包含1个数字。
在mySQL中有没有快速的方法可以做到这一点,还是应该在PHP中构建一些函数?
非常感谢您的帮助
答案 0 :(得分:2)
in()
如果值存在则返回1,如果不存在则返回0,因此您可以添加它们并查找2.
SELECT COUNT(*)
FROM your_table
WHERE ((1 IN (n1,n2,n3,n4,n5)) + (26 IN (n1,n2,n3,n4,n5)) + (88 IN (n1,n2,n3,n4,n5))) = 2
答案 1 :(得分:1)
如果您构建一个(临时)search
表来保存您想要查找的值:
CREATE TEMPORARY TABLE search (v INT PRIMARY KEY);
INSERT INTO search VALUES (26),(1),(88);
然后您的查询变为:
SELECT s1.v x, s2.v y, COUNT(*)
FROM my_table
JOIN search s1 ON s1.v IN (n1,n2,n3,n4,n5)
JOIN search s2 ON s2.v IN (n1,n2,n3,n4,n5) AND s1.v < s2.v
GROUP BY x, y;
在sqlfidle上查看。