我在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?
提前致谢。
答案 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
包含列的整个值时才有效。为了进行更复杂的比较,你需要玩分割价值等(你必须自己进行调查)