使用PHP和MYSQL返回具有特定ID号的行?

时间:2013-08-05 03:34:42

标签: php mysql

我在使用SQL查询返回正确的行时遇到了困难。我想只返回31或34行作为他们的album_items.id。我想从结果中排除任何其他album_items.id。我关注的主线是:

WHERE album_items.album IN (31,34) 

无论出于何种原因,即使是还没有返回31或34的album_items.id的行。这是完整的查询。是否有可能我没有使用正确的语法?

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'

谢谢你的时间, 萨拉

3 个答案:

答案 0 :(得分: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')

最有可能的是,第二个条件导致额外的行。你需要在适当的地方加入括号。

答案 1 :(得分: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')

答案 2 :(得分: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'