0

SQL クエリで正しい行を返すのに苦労しています。album_items.id が 31 または 34 の行のみを返したい。結果から他の album_items.id を除外したい。私が注目している主な行は次のとおりです。

WHERE album_items.album IN (31,34) 

何らかの理由で、album_items.id が 31 または 34 ではない行も返されます。これが完全なクエリです。正しい構文に慣れていない可能性はありますか?

SELECT * FROM items_table 
RIGHT JOIN items_table 
ON items_table.id=album_items.id 
WHERE album_items.album IN (31,34)
AND items_table.name LIKE '%{$term}%' 
OR items_table.description LIKE '%{$term}%'
AND items_table.active != '0'

時間をありがとう、サラ

4

3 に答える 3

1

これは操作の順序に問題があると思います。

あなたのSQLでは、あなたは持っています

WHERE album_items.album IN (31,34)
AND items_table.name LIKE '%{$term}%' 
OR items_table.description LIKE '%{$term}%'
AND items_table.active != '0'

これは次のように解釈されます

WHERE 
(album_items.album IN (31,34) AND items_table.name LIKE '%{$term}%')
OR
(items_table.description LIKE '%{$term}%' AND items_table.active != '0')

ほとんどの場合、2 番目の条件が余分な行の原因です。必要に応じて括弧を含める必要があります。

于 2013-08-05T03:39:53.790 に答える
0
SELECT * FROM items_table 
RIGHT JOIN album_items 
ON items_table.id=album_items.id 
WHERE album_items.album IN (31,34)
AND (items_table.name LIKE '%{$term}%' 
OR items_table.description LIKE '%{$term}%'
AND items_table.active != '0')

() を使用して順序を正しくします。これで、ID 31 と 34 のみの行が返されることを願っています。

私は実際にあなたがやろうとしていると思います:(item_tableとalbum_tableの結合)

   SELECT * FROM items_table 
   RIGHT JOIN album_items 
   ON items_table.id=album_items.id 
   WHERE album_items.album IN (31,34)
   AND (items_table.name LIKE '%{$term}%' 
   OR items_table.description LIKE '%{$term}%'
   AND items_table.active != '0')
于 2013-08-05T03:42:28.703 に答える
0

クエリは次のようになるはずです

SELECT * 
  FROM items_table i RIGHT JOIN album_items a
    ON i.id = a.id 
 WHERE a.album IN (31, 34)
   AND (i.name LIKE '%{$term}%' OR i.description LIKE '%{$term}%')
   AND i.active != '0'
于 2013-08-05T03:43:11.400 に答える