2011-05-13 5 views
0

私はいくつかの列(たとえばcolumn0 .. column19)を持つMySQLデータベースを持っています。条件リストのサブセットでデータベースを照会する

私は、フォームの条件を満たしたデータベースのすべての行を選択したい:

column0 < value0 AND column1 < value1 AND ... AND column19 < value19. 

キャッチは、私は上記のうち、ANY 15点の条件を満たす行を選択したいということです。

私は複数のクエリが15条件のすべての可能な組み合わせを行うことができます知っているが、私は1つのクエリだけのソリューションを探しています。

MySQLでは可能ですか?そのようなクエリを可能にする別のデータベースアーキテクチャがありますか?

ありがとうございます

+1

@AmirW:条件のうち少なくとも15が満たされている場合は、行を選択するといいですか? –

+0

@Rob Cowie、はい – AmirW

+0

あなたは文中に出てきたことがありますか? – Tbone

答えて

2

あなたは以下を使用できますが、特にうまくいくとは思いません。ウィルの答えは次のように書くこともできる

WHERE (CASE WHEN column0 < value0 THEN 1 ELSE 0 END + 
     CASE WHEN column1 < value1 THEN 1 ELSE 0 END + 
     ... + 
     CASE WHEN column19 < value19 THEN 1 ELSE 0 END) >= 15 
+0

のように見えます。ありがとう! – AmirW

+0

私の喜び - これは特に良いクエリではないことに留意してください。それは、これを行う良い方法があるかどうかはわかりません - おそらくこれも最適です... :) –

1

:上記

WHERE ( SUM(column0 < value0) 
     + SUM(column1 < value1) 
     ... + 
     + SUM(column19 < value19) 
    ) >= 15 

、MySQLだけではない他のデータベースをを動作します。だから、これより標準のCASE WHENを使う方が良いと思います。 20のインデックス(すべてのcolumn0column1の1がある場合は、

SELECT * 
FROM yourTable 
    JOIN 
     (SELECT id 
     FROM yourTable 
     WHERE column0 < value0 
     UNION ALL 
     SELECT id 
     FROM yourTable 
     WHERE column1 < value1 
     UNION ALL 
     ... 
     UNION ALL 
     SELECT id 
     FROM yourTable 
     WHERE column19 < value19 

     GROUP BY id 
     HAVING COUNT(*) >=15 
    ) AS chk 
    ON chk.id = yourTable.id 


次のようになり、このようなクエリを処理するための別の方法(idは、テーブルの主キーです)。 ..、column19)、もっと速いかもしれません。

関連する問題