2016-07-26 65 views
0

我有三個變量:SQL SELECT查詢使用搜索

$school 
$class 
$subject 

和搜索字符串$searchquery

我想尋找我的數據庫匹配搜索查詢的行...目前我使用此:

$searchquery = str_replace(" ","|",$searchquery); 
$sql = " 
    SELECT * FROM filedetails 
    WHERE school RLIKE '$searchquery' 
     OR class RLIKE '$searchquery' 
     OR subject RLIKE '$searchquery'"; 

現在,這是如何工作的,假設我進入Mathematics Class X。它的字符串轉換成Mathematics|Class|X這是罰款和搜索數據庫並打印出結果...... 但有一個錯誤:

在打印所有要麼數學或類或X在他們的行,所以我輸出包括數學的所有學校和X類的所有學校的所有科目中的所有類...

而我想讓它顯示我有數學和X類所有學校...

PS - 我嘗試使用AND而不是OR,但現在我得到空結果,因爲沒有學校匹配我的查詢字符串...

+0

你的答案在你的問題'數學和類X ...'..使用和而不是或 –

+0

在這裏你去......;)@raveenanigam –

+0

嗨什麼是使用你的三個變量 –

回答

0

一種做法是先製作所有數據搜索的不同二維數組,然後它們的交集,所以這會給所有的關鍵字匹配普通的行...

$sql = "SELECT * FROM filedetails"; 
     $query = mysql_query($sql); 
     $array1 = array(); 
     while ($row = mysql_fetch_array($query)) 
     { 
      $array1[] = $row; 
     } 
     $sql = "SELECT * FROM filedetails WHERE school RLIKE '$searchquery'"; 
     $query = mysql_query($sql); 
     $array2 = array(); 
     while ($row = mysql_fetch_array($query)) 
     { 
      $array2[] = $row; 
     } 
     $sql = "SELECT * FROM filedetails WHERE subject RLIKE '$searchquery'"; 
     $query = mysql_query($sql); 
     $array3 = array(); 
     while ($row = mysql_fetch_array($query)) 
     { 
      $array3[] = $row; 
     } 
     $sql = "SELECT * FROM filedetails WHERE class RLIKE '$searchquery'"; 
     $query = mysql_query($sql); 
     $array4 = array(); 
     while ($row = mysql_fetch_array($query)) 
     { 
      $array4[] = $row; 
     } 

現在,這段代碼是做它是針對各個領域分別搜索,使單獨的結果對每個字段的每個查詢,現在我們將採取數組的交集,以獲得具有關鍵字的普通行

但是有一個問題,假設$searchquery包含關於School和Class的詳細信息,但沒有關於Subject的信息,那麼$array3將爲空,因爲查詢將導致NULL,那麼我們需要考慮處理已在Another Question Here中解決的空數組...

希望這有助於... :)