0

我正在 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 是这样的:

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

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

提前致谢。

4

1 回答 1

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包含列的整个值时才有效。要进行更复杂的比较,您需要尝试拆分值等(您必须自己进行调查)

于 2012-05-02T00:10:18.673 回答