我有一个mySQL通配符查询无效,可能因为我使用的是InnoDB而不是MyISAM。
SELECT a.product_id, a.category_id FROM products a
LEFT JOIN users u ON u.userid=a.ownerid
WHERE a.active=1 AND a.approved=1
AND a.deleted=0 AND a.name LIKE '%*my*%'
AND a.name LIKE '%*donuts*%'
AND (a.name REGEXP '( )*(*my*)*( )*(*donuts*)( )*')
只要使用单词而不是通配符,它就可以正常工作,这不是问题。
我只是想知道,是
的一部分(a.name REGEXP '( )*(*my*)*( )*(*donuts*)( )*')
之后确实需要
LIKE '%*my*%' AND a.name LIKE '%*donuts*%'
有什么区别?
答案 0 :(得分:4)
有什么区别?
正则表达式
(a.name REGEXP '( )*(*my*)*( )*(*donuts*)( )*')
这会产生错误,因为量词(例如,未转义的*
字符)在组的开头无效(即紧接在未转义的(
字符之后)。忽略发生这种情况的两次产生:
(a.name REGEXP '( )*(my*)*( )*(donuts*)( )*')
这匹配任何a.name
:
零次或多次出现:
m
,后跟y
然后是
donut
,后跟s
,后跟
简单模式
a.name LIKE '%*my*%' AND a.name LIKE '%*donuts*%'
这匹配任何a.name
:
*my*
,后跟和:
*donuts*
,后跟