我正在尝试为以下内容编写一个查询...
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但是结果并不是预期值。我怀疑引起这个问题的行是..
AND name LIKE '%$adv_term_det%' OR description LIKE '%$adv_term_det%'我怀疑这应该是一个子查询,但在多次尝试使用IN之后,我仍然无法使其工作。
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;基本上,我希望返回满足所有其他条件的所有记录,并且还具有name或description格式的$adv_term_det。
如果我只使用AND name LIKE '%$adv_term_det%',我会得到我期望的查询结果;同样,如果我只使用AND description LIKE '%$adv_term_det%',但我需要查找name或description中包含'%$adv_term_det%'‘的记录
发布于 2016-07-29 00:26:01
你要么对复杂的布尔逻辑不是很有经验,要么就是错过了这个错误。在这两种情况下,我都建议您使用括号,特别是在混合使用AND和OR时。我想这就是你想要的逻辑:
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字符串是危险的。为此,您应该使用参数。
https://stackoverflow.com/questions/38641828
复制相似问题