我在使用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'
谢谢你的时间, 萨拉
答案 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'