1

構造を持つSQLテーブルがあります

CREATE TABLE IF NOT EXISTS `engine4_user_fields_values` (
  `item_id` int(11) unsigned NOT NULL,
  `field_id` int(11) unsigned NOT NULL,
  `value` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`item_id`,`field_id`,`index`)
)

field_id ='17' AND 値 IN(5,8,7)+field_id ='20' AND 値 IN(73,76) の行を選択したい

field_id が 17 の場合は 20 にならないため、以下のように選択できませんでした!

SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) AND (field_id ='20' AND value IN(73,76))

OR を使用すると、いずれかの条件を満たす値が選択されます。

そのために join を使用しますか? コードがよくわからない!この選択クエリを取得するのを手伝ってください

4

4 に答える 4

1

group byアイテムを作成し、句を使用しhavingて、アイテムに両方の条件に一致する行があることを要求できます。

select  item_id
from    engine4_user_fields_values
group by
        item_id
having  max(case when field_id ='17' and value in (5,8,7) then 1 end) = 1
        and max(case when field_id ='20' and value in (73,76) then 1 end) = 1
于 2012-12-13T10:16:57.667 に答える
1

あなたの説明から、真ん中の AND を OR に変更する必要があるように聞こえます。最初の条件または 2 番目の条件に一致するすべての行を返したいとします。フィールド ID を 17 と 20 にすることはできません。

SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) OR (field_id ='20' AND value IN(73,76))
于 2012-12-13T10:13:44.747 に答える
0

+ を field_id ='17' AND value IN(5,8,7)+field_id ='20' AND values IN(73,76)
に使用しているため、技術的には field_id ='17' AND field_id = にすることはできません'20' 同時に
以下のように AND の代わりに OR を使用する必要があります

SELECT * FROM `engine4_user_fields_values` WHERE (field_id ='17' AND value IN(5,8,7)) OR (field_id ='20' AND value IN(73,76))
于 2012-12-13T10:18:21.510 に答える
0

OR を使用する必要がありますが、次の 2 つのサブ条件の間です。

SELECT * 
FROM `engine4_user_fields_values` 
WHERE (field_id ='17' AND value IN(5,8,7))
OR (field_id ='20' AND value IN(73,76))
于 2012-12-13T10:15:26.637 に答える