2013-10-29 38 views
2

基於種姓,宗教,地理位置,性別,年齡我需要從我的數據庫中過濾數據,我該怎麼做。搜索mysql數據庫使用更多的關鍵字使用php

在mysql數據庫中我有宗教,性別,地點,年齡作爲單獨的列在同一個表中。

代碼,我已經使用

$result=mysql_query("SELECT * FROM enquiry where location like '%$text%'and gender like'%$text1%' ") 
                  or  die("error"); 
$found=mysql_num_rows($result); 

if($found>0){ 
while($row=mysql_fetch_array($result)){ 
//display of data 
    } 

使用這個我可以使用一個關鍵字一個欄搜索數據...因爲我是新的,請給我上懸而未決這個使用PHP正確的方式。

+4

''或者其他像'%$ text%'這樣的列怎麼樣? – geomagas

+0

我不明白你的問題... –

+1

or ...'location REGEXP「text1 | text2 | text3」'或'location in('text1','text2','text3')' –

回答

0

使用OR操作

$result=mysql_query("SELECT * FROM enquiry where location like '%$text%' OR caste like '%$text%' OR religion like '%$text%' OR gender like '%$text%' OR age like '%$text%'") 
                  or  die("error"); 
$found=mysql_num_rows($result); 

if($found>0){ 
while($row=mysql_fetch_array($result)){ 
//display of data 
    } 
+1

我需要在所有這些字段中搜索不同的文本......我必須將文本與位置匹配,text1與性別等....過濾來自數據庫的數據......這些文本,text1是我從用戶搜索表單中獲得的項目.... @ selite – anya

0

嘗試這裏創建動態查詢例如查詢,你可以根據你的needs.Here餘米假設您正在獲取數據從用戶通過搜索形式闡述。

現在我們所要做的就是檢查用戶是否填充了特定的字段並相應地創建查詢。這樣您的查詢就不會不必要地複雜。

$sql = "SELECT * FROM table_name "; 

    if(isset($_REQUEST['location']) && $_REQUEST['location'] != ''){ 
     if(strpos($sql, "WHERE")){ 
      $sql .= "AND WHERE location like '%$text%'"; 
     }else{ 
      $sql .= "WHERE location like '%$text%'"; 
     };   
    } 

    if(isset($_REQUEST['religion']) && $_REQUEST['religion'] != ''){ 
     if(strpos($sql, "WHERE")){ 
      $sql .= "AND WHERE religion like '%$text%'"; 
     }else{ 
      $sql .= "WHERE religion like '%$text%'"; 
     } 
    } 

    $result=mysql_query($sql) or die("error"); 
+0

我需要在所有這些字段中搜索不同的文本...我必須匹配文本與位置,text1與性別等....從數據庫中過濾數據...這些文本,text1是我從用戶搜索表單中獲得的項目。 ......對於這個我已經使用了我已發佈的代碼,但它似乎在錯誤@nikhil – anya

+0

任何代碼不會完全相同的東西,你要求的,它匹配的文本與位置,text1與宗教.MySQL「 WHERE「子句僅在用戶指定某些細節時纔會生成。」AND「子句確保只返回滿足所有類別的結果。如果你的需求是別的,試着詳細描述它 – Nikhil

0

試試全文檢索這樣的: -

$q="your search value";  
$searchArray = explode(" ", $q); 
$query="SELECT * FROM cmusers WHERE MATCH (`firstname`, `lastname`,`email`) AGAINST ('"; 
$i=0; 
foreach ($searchArray as $word) { 
    $query .= "*".$word."* "; 
} 
$query .= "' IN BOOLEAN MODE)"; 

這將搜索所有的關鍵詞對所有列 但這需要表myisamengine 默認情況下,大多數表與InnoDB引擎,所以你可以通過這個來改變引擎

ALTER TABLE table_name ENGINE = MYISAM; 
+1

指出除了支持全文搜索之外,myisam表也不夠耐用,並且不完全事務化......如果你習慣於innodb,規則改變。許多人使用單獨的服務進行搜索,例如彈性搜索,與MySQL全文搜索相比,這些服務通常具有改進的性能和設施。 –