首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除了多个OR之外,还需要WHERE AND子句

除了多个OR之外,还需要WHERE AND子句
EN

Stack Overflow用户
提问于 2012-07-26 23:43:21
回答 5查看 44关注 0票数 0

我需要返回't‘(线程)中包含'menu_item_id’= 1的所有项。

此外,我需要根据f.tag过滤所有上述结果。

代码语言:javascript
运行
复制
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)。

任何帮助都将不胜感激。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-07-26 23:45:26

使用括号指定ANDOR的优先级。

代码语言:javascript
运行
复制
a AND (b OR c)

代码语言:javascript
运行
复制
(a AND b) OR c

例如:

代码语言:javascript
运行
复制
WHERE t.menu_item_id='1'
  AND (    f.tag LIKE '%hello%'
        OR f.tag LIKE '%world%'
      )

这将只返回menu_item_id = '1‘的行,并且这些行的标记包含'hello’或'world‘。

票数 2
EN

Stack Overflow用户

发布于 2012-07-26 23:45:39

比如..。括号?

代码语言:javascript
运行
复制
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即可。

票数 3
EN

Stack Overflow用户

发布于 2012-07-26 23:46:52

我不确定这是否回答了您的问题,但我喜欢使用括号使内容更容易阅读,如下所示

代码语言:javascript
运行
复制
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%‘

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11673038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档