2016-08-11 95 views
2

我需要從表單中輸入的單詞查詢MYSQL數據庫。我需要搜索數據庫的兩列,並輸入搜索表單中的所有單詞。第一列是記錄號,第二列是描述。當在這兩列上搜索時,我需要搜索記錄號模糊(%t%),並用精確匹配搜索描述。我需要查詢返回所有這些詞都出現在任一列中的所有記錄。PHP MYSQL搜索多個字多列

因此,如果我搜索C-101,查詢將在兩列之一中返回任何帶有C-101的記錄。如果我搜索C-101和螺絲,它將返回所有記錄,其中包含兩欄中的記錄。如果我搜索C-101

$text = ''; 
$the_array = explode(' ', $formdata); 
$i = 0; 

foreach($the_array AS $t){ 
if($i == 0){ 
$text .= " '%$t%' "; 
$text2 .= " '$t%' "; 
$i = 1; 
}else{ 
$text .= " OR recordnumber LIKE '%$t%' "; 
$text2 .= " AND description LIKE '$t%' "; 
} 
} 

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE $text) OR (description LIKE $text2)"; 

有了這個代碼,並用螺絲將與C-101或螺絲返回所有記錄在裏面:

我的代碼,現在是不正常工作。這就是所有第一欄中都帶有C-101的記錄,第二欄中帶有螺絲的所有記錄以及第一欄中帶有C-101的所有記錄以及第二欄中的螺絲。

我需要它返回所有的行與C-101和螺絲一起出現在同一行。

這需要工作,如果有人輸入兩個三或四個單詞。通常他們只進入兩個。

感謝您的任何幫助。

+0

你嘗試自己看着辦吧?你嘗試打印'$ sql'的值是爲了嘗試解決這個問題嗎?你知道查詢的樣子嗎? (如果你沒有編寫循環和php代碼 - 你知道該寫什麼嗎?) – Dekel

+0

text2也未定義, –

回答

0

您的SQL錯誤..

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE $text) OR (description LIKE $text2)"; 

試試這個..

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE ".$text.") OR (description LIKE ".$text2.")"; 

希望這有助於..:d

0

您需要連接內部的串查詢,而不是直接放在裏面。我認爲這是問題。代碼的其餘部分在哪裏執行查詢?

$sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE ".$text.") OR (description LIKE ".$text2.")"; 

此外,不要在查詢中使用SELECT *不斷,始終指定你想要的列從輸出。

0

爲您創建一個例子,檢查它是否適合你,

<?php 

$formdata = "string1 string2 string3 string4 string5"; 

$text = ''; 
$text2 = ''; 
$the_array = explode(' ', $formdata); 
$i = 0; 

foreach($the_array AS $t){ 
    if($i == 0){ 
     $text .= " '%$t%' "; 
     $text2 .= " '$t%' "; 
     $i = 1; 
    }else{ 
     $text .= " OR recordnumber LIKE '%$t%' "; 
     $text2 .= " AND description LIKE '$t%' "; 
    } 
} 

echo $sql = "SELECT * FROM drawrecord WHERE (recordnumber LIKE ".$text.") OR (description LIKE ".$text2.")"; 

?> 
+0

試過這個,它沒有工作。與原始代碼一樣工作。謝謝你的建議。 –

0

使用全文搜索,你可以做到這一點

$formdata = "string1 string2 string3 string4 string5"; 

$search_string = "+".str_replace(" "," +",$formdata); 
//string will be become "+string1 +string2 +string3 +string4 +string5" 

$sql = mysql_query("SELECT * FROM drawrecord WHERE 
        MATCH (recordnumber, description) 
        AGAINST ('".$search_string ."' IN BOOLEAN MODE);"); 
+0

即使我正在搜索我所知道的數據中的單詞,這也不會給出任何結果。 –