2012-05-01 23 views
0

我正在尋找mysql db中的正確查詢。讓我們看看我的表:mysql - 請以正確的正則表達式語法提出建議

用戶:

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); 

現在當$關鍵字='約翰褲'它工作得很好 - 我得到id = 1的用戶。沒關係。但是當我設置$ keywords ='john'時,它會返回空字符串。我甚至知道爲什麼 - 在item_name中沒有'john',所以我的AND條件返回false。問題是: 什麼是正確的regexp表達式返回user = 1 with $ keywords =「john trousers」,如果$ keyword ='john'得到兩行 - id = 1和id = 2?

在此先感謝。

回答

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包含整個列的值。要做出更復雜的比較,你需要玩分裂值等(你必須做你自己的調查)

+0

那麼它肯定是有趣的方式來解決問題。不幸的是,列的整個值必須符合關鍵字的條件:(+1爲你我的朋友,但仍然在等待另一個更合適的解決方案:( – Kalreg