我需要返回't‘(线程)中包含'menu_item_id’= 1的所有项。
此外,我需要根据f.tag过滤所有上述结果。
SELECT t.*, u.username AS owner, uu.username AS replyname, a.location
FROM thread t
INNER JOIN filter_thread as ft ON t.thread_id = ft.thread_id
INNER JOIN filter as f ON f.filter_id = ft.filter_id
INNER JOIN users u ON t.owner_id = u.id
INNER JOIN users uu ON t.last_post_id = uu.id
INNER JOIN user_profiles AS up ON u.id = up.user_id
INNER JOIN avatars AS a ON up.avatar_id = a.id
WHERE t.menu_item_id='1'
AND f.tag LIKE '%hello%'
OR f.tag LIKE '%world%'问题领域:AND f.tag LIKE '%hello%' OR f.tag LIKE '%world%'
需要认识到的重要一点是,'hello‘和'world’可能并不总是出现在查询中。此外,可能还有3个以上的搜索附加到它,但是,menu_item_id将始终被搜索。
我不希望所有的结果都需要每个f.tags,我只希望结果包含它们中的任何一个(OR)。
任何帮助都将不胜感激。
发布于 2012-07-26 23:45:26
使用括号指定AND和OR的优先级。
a AND (b OR c)与
(a AND b) OR c例如:
WHERE t.menu_item_id='1'
AND ( f.tag LIKE '%hello%'
OR f.tag LIKE '%world%'
)这将只返回menu_item_id = '1‘的行,并且这些行的标记包含'hello’或'world‘。
发布于 2012-07-26 23:45:39
比如..。括号?
SELECT t.*, u.username AS owner, uu.username AS replyname, a.location
FROM thread t
INNER JOIN filter_thread as ft ON t.thread_id = ft.thread_id
INNER JOIN filter as f ON f.filter_id = ft.filter_id
INNER JOIN users u ON t.owner_id = u.id
INNER JOIN users uu ON t.last_post_id = uu.id
INNER JOIN user_profiles AS up ON u.id = up.user_id
INNER JOIN avatars AS a ON up.avatar_id = a.id
WHERE t.menu_item_id='1'
AND (
f.tag LIKE '%hello%'
OR f.tag LIKE '%world%'
)如果问题是这个查询是动态进行的,那么只需在前面添加一个1即可。
发布于 2012-07-26 23:46:52
我不确定这是否回答了您的问题,但我喜欢使用括号使内容更容易阅读,如下所示
SELECT t.*, u.username AS owner, uu.username AS replyname, a.location
FROM thread t
INNER JOIN filter_thread as ft ON t.thread_id = ft.thread_id
INNER JOIN filter as f ON f.filter_id = ft.filter_id
INNER JOIN users u ON t.owner_id = u.id
INNER JOIN users uu ON t.last_post_id = uu.id
INNER JOIN user_profiles AS up ON u.id = up.user_id
INNER JOIN avatars AS a ON up.avatar_id = a.id
WHERE t.menu_item_id='1'
AND (f.tag LIKE '%hello%'
OR f.tag LIKE '%world%')现在它说where t.menu_item_id =1和括号中的任何一个条件句都是真的,而不是说(t.menu_item_id =1和f.tag LIKE '%hello%')或f.tag LIKE '%world%‘
希望这能有所帮助。
https://stackoverflow.com/questions/11673038
复制相似问题