0

我一直很难用我的 SQL 查询返回正确的行。我只想返回以 31 或 34 作为其album_items.id 的行。我想从我的结果中排除任何其他 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')

最有可能的是,第二个条件导致了额外的行。您需要在适当的地方包含括号。

于 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 回答