0

我有下表:

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

非常感谢您的帮助

4

2 回答 2

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
于 2012-08-31T12:48:00.227 回答
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;

sqlfile上查看。

于 2012-08-31T15:19:20.393 回答