2014-03-27 67 views
0

我已經爲使用php查詢數據庫的同事編寫了一個快速搜索頁面。它們的字符串被命名爲$ wordvariable(他們也摘棗等,但是這不是這裏重要的),這裏是我在做什麼至今:SELECT * FROM表where'column like'%variable%' - 任意順序的多個單詞

$wordvariable = explode(" ", $wordvariable); 
$wordvariable = implode("%", $wordvariable); 
$Query = mysql_query(
    "SELECT * FROM table 
    WHERE (column1 like '%$wordvariable%' or column2 like '%$wordvariable%') 
    AND logdatex between $TimeEarlier and $TimeNow" 
) or die(mysql_error()); 

然而,這只是搜索的話,他們在自己有訂單類型鍵入它們,例如搜索「堆棧溢出」會發現「堆棧溢出」,但不會找到「溢出堆棧」。我希望我的措辭這個正確的,任何幫助,將不勝感激

+0

你的榜樣,如果他們在搜查 「%堆棧溢出%」,就不會找到 「溢出堆棧」 。他們沒有任何相似之處。如果您打算通過單個輸入中的各種單詞進行搜索,則應首先將搜索分成單獨的單詞。這會讓你獲得更好的結果。 – durbnpoisn

+0

我知道它不會找到它,但它有助於我發現它後我 – Maff

回答

0

是這樣的:

$where = "WHERE column1 LIKE '%" . implode("%' OR column1 LIKE '%", explode(" ", $wordvariable)) . "%'"; 

短路故障,只是explode$wordvariable的空間,然後implode對短語的個別單詞,你想。

更詳細,包括column2

$words = explode(" ", $wordvariable); 
$list1 = implode("%' OR column1 LIKE '%", $words); 
$list2 = implode("%' OR column2 LIKE '%", $words); 

echo $where = "WHERE (column1 LIKE '%$list1%') OR (column2 LIKE '%$list2%')"; 
0

更新你的代碼就像這裏:

$wordvariable = explode(" ", $wordvariable); 

$Query = mysql_query(
    "SELECT * FROM table 
    WHERE (column1 like '%" . implode("%' OR column1 Like '%", $wordvariable) . "%' 
    OR column2 like '%" . implode("%' OR column2 Like '%", $wordvariable) . "%') 
    AND logdatex between $TimeEarlier and $TimeNow" 
) or die(mysql_error()); 
相關問題