mysql - 请使用正确的regexp语法建议

时间:2012-05-01 23:26:53

标签: mysql regex

我在mysql db中寻找正确的查询。我们考虑一下表:

用户:

id | user_name | desc
--------------------------
1  | john      | tall
2  | john      | fat
3  | maria     | pretty

项目:

id | item_name | color
--------------------------
1  | trousers  | red
2  | shoes     | blue
3  | shoes     | red

我的搜索引擎搜索数据库以选择带有查询的结果:

SELECT i.item_name, i.color, u.user_name, u.desc 
FROM users u, items i 
WHERE u.id = i.id 
   AND item_name REGEXP $keywords 
   AND user_name REGEXP $keywords

可变$关键字是这样的:

$keywords = explode(' ', $_POST['keywords']);
$keywords = implode('|', $keywords);

现在,当$ keywords ='john trousers'时,一切正常 - 我得到id = 1的用户。没关系。但是当我设置$ keywords ='john'时,它返回空字符串。我甚至知道为什么 - item_name中没有'john'所以我的AND条件返回false。问题是: 使用$ keywords =“john trousers”返回user = 1的正确regexp表达式是什么,如果$ keyword ='john'得到两行 - id = 1且id = 2?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用列值作为搜索值来反转比较(并使用LIKE代替REGEXP):

SELECT i.item_name, i.color, u.user_name, u.desc 
FROM users u, items i 
WHERE u.id = i.id 
AND $keywords like concat('%', item_name, '%')
AND $keywords like concat('%', user_name, '%')

请注意,虽然这是一种简洁的方法,但只有在keywords包含列的整个值时才有效。为了进行更复杂的比较,你需要玩分割价值等(你必须自己进行调查)