繁体   English   中英

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

[英]Returning rows with specific ID numbers with PHP and MYSQL?

我一直很难用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'

谢谢你的时间,莎拉

我相信这是操作顺序的问题。

在你的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')

第二种情况很可能导致多余的行。 您需要在适当的地方加上括号。

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')

我猜你的查询应该像这样

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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM