2017-10-21 7 views
0

MySQLには、さまざまなレベル(色、場所など)のアイテムを記述するテーブルが20個以上あります。以下は "table01"の例ですMySQL:複数の行に一致する項目を選択してください

+----+----------+ 
| ID | property | 
+----+----------+ 
| 1 | A  | 
| 1 | B  | 
| 2 | C  | 
| 2 | B  | 
+----+----------+ 

ここでは、複数の基準に一致する項目を検索したいと考えています。次のクエリは正常に動作します。

SELECT 
    table01.ID, table01.property, table02.property, table03.property [...] 
FROM 
    table01 
LEFT JOIN table02 ON table02.ID = table01.ID 
LEFT JOIN table03 ON table03.ID = table01.ID 
[...] 
WHERE 
    table01.property = "A" 
    and table02.property = "B" 
    and table03.property = "A" 
    [...] 

Heres私の問題です。私は1つのテーブル内のいくつかのプロパティに一致する項目を検索したい。例えば、情報が複数の行に格納されているので、私は、それを達成する方法がわからない

table01.property = "A" AND table01.property = "B" 

(このクエリは明らかに動作しません)。

提案がありますか?データベースは膨大で(テーブルあたり数千のエントリ)、時々新しい行が追加されます。 PHPを使用して処理を行うか、純粋なMySQLソリューションが必要ですか?

+0

質問が必要です。照会されたプロパティは静的ですか?または、ユーザー定義のプロパティーに対する動的な照会を作成したいですか? –

+0

データベース構造は静的で、テーブルとその列(名前)は同じです。アイテムとプロパティは時々追加されます –

+0

私は静的なクエリ自体を意味していますか?常に同じプロパティをクエリしますか? –

答えて

2

あなたはあなたの両方の性質を持っているIDのリストが表示されます

SELECT ID,count(property) AS CNT FROM table01 
WHERE property = 'A' OR property = 'B' 
GROUP BY ID 
HAVING CNT=2; 

この

を行うことによって、例えば、これを達成することができました。

しかし、より多くのプロパティでより複雑になり、より多くのテーブルをチェックして扱いにくくなる可能性があります。可能であれば、少なくとも複数のプロパティではなくプロパティを持つ単一のテーブルを持つようにデータベーススキーマを再考するほうが便利かもしれません。次のように

+0

ありがとう、それは私のために働くはずです –

0

あなたはあなたのクエリに@Gnudiffによって与えられたクエリを使用することができます。

SELECT 
    table01.ID, table01.property, table02.property, table03.property [...] 
FROM 
    (SELECT *FROM table01 
    WHERE property = 'A' OR property = 'B' 
    GROUP BY ID 
    HAVING count(property)=2) as table01 
LEFT JOIN table02 ON table02.ID = table01.ID 
LEFT JOIN table03 ON table03.ID = table01.ID 
[...] 
WHERE 
    table02.property = "B" 
    and table03.property = "A" 
    [...] 

Click here for Demo

はそれが役に立てば幸い!

+0

期待どおりに動作していますか? –

関連する問題