-3

こんにちは、クエリを書く際に助けが必要です。

以下は私のDB構造です

id  name    key    value
1   book1   key1    abc
2   book2   key2    aaa
3   book3   key5    abc
4   book4   key3    abc
5   book5   key2    aaa
6   book6   key2    aab
7   book7   key1    abc
8   book8   key2    abc
9   book9   key1    abc
10  book10  key1    abc

そして、キーが abc の値を持つ key1 と aaa の値を持つ key2 の組み合わせを持つ本が必要です。

だからそれは戻るべきです

1   book1   key1    abc
2   book2   key2    aaa
5   book5   key2    aaa
7   book7   key1    abc
9   book9   key1    abc
10  book10  key1    abc

key2 と値 aab を持つ本は返されません。

Ps これは、必要性を示すために作成した構造の例にすぎません。実際、私はワードプレスの投稿メタテーブルに取り組んでいます。

4

5 に答える 5

2
select id, name, key, value from <yourTable> 
where key = "key1" 
or (key = "key2" and value = "aaa");

ドキュメントも参照してください。

于 2012-05-12T14:50:06.530 に答える
2
select 
    id, name, key, value from <table> 
where 
    (key = "key1" and value="abc")
or 
    (key = "key2" and value = "aaa");
于 2012-05-12T14:52:05.413 に答える
1

あなたのデザインによれば、ある時点で本ごとに数key+valueペアになると思います。これは、いくつかの特定のキーが特定の値を持つ書籍を選択したい場合があることを意味します。

これは、次の SQL で実現できます (指定された例の場合)。

SELECT t.id,t.name,k.key1,k.key2
  FROM test t
  JOIN (SELECT t.id,k1.value AS key1,k2.value AS key2
          FROM test t
          LEFT JOIN test k1 ON t.id=k1.id AND k1.`key`='key1'
          LEFT JOIN test k2 ON t.id=k2.id AND k2.`key`='key2'
  ) k ON t.id = k.id
WHERE k.key1='abc' OR k.key2 = 'aaa';

内側の部分はサブジェクトにキーを含むピボット テーブルを作成し、外側の部分は結果のフィルタリングを実行します。ここでこの設定をいじることができます。

ただし、このような設計では、件名のテーブルを と の 2 つに分割することをお勧めしbooksますparams。このようなセットアップはこちらで確認できます。フィルタ条件を に変更すると、一致するk.key1='abc' AND k.key2 = 'aaa'ものだけになることに注意してください。book10

この例は非常に単純ですが、アイデアが得られます。

于 2012-05-12T16:30:07.767 に答える
1
SELECT * FROM mytable
WHERE key='key1' AND value='abc'
UNION ALL
SELECT * FROM mytable
WHERE key='key2' AND value='aaa'
于 2012-05-12T14:55:30.210 に答える
0

これは、値に key1 と abc または key2 と aaa があるかどうかを確認するためのものであるため、key1 と key2 のいずれかを返すことができます。

SELECT * FROM table WHERE key = 'key1' AND value ='abc' OR key = 'key2' AND value = 'aaa'
于 2012-05-12T14:50:24.737 に答える