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;

sqlfidleでそれを参照してください。

于 2012-08-31T15:19:20.393 に答える