首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL多参数查询

MySQL多参数查询
EN

Stack Overflow用户
提问于 2016-07-29 00:21:09
回答 1查看 619关注 0票数 0

我正在尝试为以下内容编写一个查询...

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE id IS NOT NULL
AND account_name LIKE '%$account_search%'
AND name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%'
AND type != 'online'
AND marked_completed_by = ''
ORDER BY $sort_by DESC LIMIT $page_position, $item_per_page

但是结果并不是预期值。我怀疑引起这个问题的行是..

代码语言:javascript
复制
AND name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%'

我怀疑这应该是一个子查询,但在多次尝试使用IN之后,我仍然无法使其工作。

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE call_ref IN
  (SELECT call_ref FROM calls
   WHERE name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%'
  )
AND id IS NOT NULL
AND account_name LIKE '%$account_search%'
AND type != 'online'
AND marked_completed_by = ''
ORDER BY $sort_by DESC LIMIT $page_position, $item_per_page;

基本上,我希望返回满足所有其他条件的所有记录,并且还具有namedescription格式的$adv_term_det

如果我只使用AND name LIKE '%$adv_term_det%',我会得到我期望的查询结果;同样,如果我只使用AND description LIKE '%$adv_term_det%',但我需要查找namedescription中包含'%$adv_term_det%'‘的记录

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 00:26:01

你要么对复杂的布尔逻辑不是很有经验,要么就是错过了这个错误。在这两种情况下,我都建议您使用括号,特别是在混合使用ANDOR时。我想这就是你想要的逻辑:

代码语言:javascript
复制
WHERE (id IS NOT NULL) AND
      (account_name LIKE '%$account_search%') AND
      (name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%') AND
      (type <> 'online') AND
      (marked_completed_by = '')

还要注意,将变量直接插入SQL字符串是危险的。为此,您应该使用参数。

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

https://stackoverflow.com/questions/38641828

复制
相关文章

相似问题

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