例如,如果我想在下面搜索。
> lav'ro (I can't search it by "lav'r" because of ' in the string)
> am[op]st (I can't search it by "am[o" because of [ in the string)
我的问题是如何使用选择查询,以便帮助我带来输出?
下面是我的SELECT查询。
SELECT * FROM TableName
WHERE (Col1 LIKE '%$value%' OR Col2 LIKE '%$value%')
ORDER BY
CASE WHEN (Col1 LIKE '$value' AND Col2 LIKE '$value') THEN 1
WHEN Col1 LIKE '$value' THEN 2
WHEN Col2 LIKE '$value' THEN 3
WHEN Col1 LIKE '$value%' THEN 4
WHEN Col2 LIKE '$value%' THEN 5
WHEN Col1 LIKE '%$value' THEN 6
WHEN Col2 LIKE '%$value' THEN 7
WHEN Col1 LIKE '%$value%' THEN 8
WHEN Col2 LIKE '%$value%' THEN 9
ELSE 10
END asc,
length(Col1 or Col2) limit 15
在此处搜索“ $ value” 个动态词。
运行正常,在普通搜索中出现符号搜索问题。
答案 0 :(得分:1)
您必须在单引号前加上\才能使它起作用
SELECT a.*, 3 - counter AS remaining_reviews, IFNULL(tl.already_reviewed, '') AS already_reviewed
FROM accounts AS a
LEFT JOIN (
SELECT account_id, GROUP_CONCAT(team_id ORDER BY team_id) AS already_reviewed
FROM team_logs
GROUP BY account_id) AS tl ON a.id = tl.account_id
WHERE a.counter < 3
对于第二期,请尝试在%之前或之后附加
SELECT * FROM `table` WHERE `column` LIKE 'lav\'ro'
答案 1 :(得分:1)
您不必使用like
。您可以只使用instr()
或=
:
where instr(col1, ?) > 0
在需要like
和正则表达式以实现其模式匹配功能时使用它们。
而且-记录下来,在字符串中搜索单引号没有问题。唯一的问题是表达字符串。为此,请加倍单引号:
where col1 like concat(?, '%')
在传递带有单引号的参数时有效。这也可以:
where col1 like 'lav''r%'