包含5个指定值中的2个的行数

时间:2012-08-31 12:39:44

标签: mysql

我有下表:

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中构建一些函数?

非常感谢您的帮助

2 个答案:

答案 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上查看。

相关问题