2015-05-09 155 views
-1
ID CODE  STATE CITY   AREA 
1 SBIN0000952 ORISSA JAIPUR   TOWN 
2 SBIN0000953 ORISSA KURAPUT   VILLAGE 
3 SBIN0000954 DELHI DELHI   TOWN 
4 SBIN0000955 DELHI NEW DELHI  VILLAGE 
5 SBIN0000956 GOA  SOUTH GOA  VILLAGE 
6 SBIN0000957 GOA  PANAJI   TOWN 
7 SBIN0000958 KERLA CHOCHIN   TOWN 
8 SBIN0000959 KERLA TRIVANDRAM  VILLAGE 
9 SBIN0000960 ANDHRA VIZAG   TOWN 
10 SBIN0000961 ANDHRA HYDERABAD  VILLAGE 

是我的表,我想搜索多個關鍵字,例如多個關鍵字搜索使用PHP MySQL的結果記錄

kerla鎮那麼它應該顯示下我現在的紀錄

7 SBIN0000958 KERLA CHOCHIN TOWN 

在PHP代碼

include('dbConnect.inc.php'); 

//collect 
if(!isset($_POST['search'])){ 
    header("Location:index.php"); 

} 
    $searchq = mysql_real_escape_string($_POST['search']); 
    $search_sql = "SELECT * FROM `bankifscin` WHERE STATE LIKE '%$searchq%' OR CITY LIKE '%$searchq%' OR CODE LIKE '%$searchq%' "; 
    $search_query = mysql_query($search_sql) or die(mysql_error()); 
    if(mysql_num_rows($search_query)!=0){ 
    $search_rs = mysql_fetch_assoc($search_query); 
    } 

打印

<?php if(mysql_num_rows($search_query)!=0){ 
    do{ ?> 

    <?php 

    $bank = $search_rs['BANK']; 
    $ifsc = $search_rs['IFSC']; 
    $branch= $search_rs['BRANCH']; 
    $micr = $search_rs['MICR_CODE']; 
    $address = $search_rs['ADDRESS']; 
    $contact = $search_rs['CONTACT']; 
    $city = $search_rs['CITY']; 
    $district = $search_rs['DISTRICT']; 
    $state = $search_rs['STATE']; 
     ?> 
     <table width="100%" border="2" bordercolor="#000" class="bdrcolor"> 


    <tbody>  
    <tr> 
    <td width="15%"><?=$bank?></td> 
     <td width="15%"><?=$branch?></td> 
     <td width="15%"><b>IFSC:</b><?=$ifsc?> <br /><b>MICR:</b><?=$micr?></td> 
     <td width="20%"><?=$address?><br /> <b>City :</b><?=$city?> <br /> <b>District :</b><?=$district?> <br /> <b>State:</b> <?=$state?></td> 
     <td width="10%"><?=$contact?></td> 
    </tr> 
    <br /> 
    </tbody> 
</table> 



    <?php }while ($search_rs = mysql_fetch_assoc($search_query)); 

}else{ 
     echo "No Results"; 

     } 


    ?> 

其只給一個關鍵詞的結果還是沒有結果

+0

mysql_ *不贊成使用PDO,而不是 –

+0

究竟是什麼你的意思是*一個關鍵字*。你的意思是:1記錄,或1列,... *關鍵字*通常是指編碼語法,如關鍵字:'if','else','SELECT',... – bvdb

+0

見kerla和城鎮是兩個關鍵字我想要顯示與數據庫中的這些關鍵字匹配的結果 –

回答

0

你應該重複你的結果集,看到的所有記錄。

$result = mysql_query($query); 
    if ($result != NULL) 
    { 
     while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
     { 
     foreach ($row as $key => $value) 
     { 
      // todo: use $key and $value 
     } 
     } 
     mysql_free_result($result); 
    } 

編輯:

在你不知道的情況下,呼叫mysql_fetch_array($result, MYSQL_ASSOC)真的是一回事mysql_fetch_assoc($result)

編輯:

如果你只想看到包含所有關鍵字的記錄。然後你應該改變你的SQL查詢,你需要在你的SQL查詢中使用AND而不是OR

"SELECT * FROM `bankifscin` WHERE STATE LIKE '%$state%' AND CITY LIKE '%$city%' AND CODE LIKE '%$code%' "; 

我猜並非所有的關鍵字都在使用。所以你可能想在運行時建立這個查詢。

$query = "SELECT * FROM `bankifscin` WHERE 1=1"; 
if ($useCity) $query .= " AND city like '%{$city_keyword}%'"; 
if ($useState) $query .= " AND state like '%{$state_keyword}%'"; 
if ($useCode) $query .= " AND code like '%{$code_keyword}%'"; 

我對你的問題沒有很好的理解。也許你只想包含關鍵字,如果他們指定? (例如​​)

編輯:

從我從您的最後一個職位的理解。你希望輸入被分成單詞。並且每個必須匹配至少1列。意思是所有單詞都必須用於查詢。然後,你可以試試這個:

// split the input in words 
$searchq = $_POST['search']; 
$words = explode(" ", $searchq); 
$wordCount = count($words); 

// declare which columns should be searched 
$columns = array("city", "town", "code", "area"); 
$columnCount = count($columns); 

// start from a basic query, which we will expand later 
$query = "SELECT * FROM `bankifscin` WHERE "; 

// all words should be used 
// that's why we are adding them with the 'AND' operator. 
for($i=0;$i<$wordCount;$i++) 
{ 
    $word = mysql_escape_string($words[$i]); 
    if ($i > 0) $query .= " AND "; 

    // build the condition 
    $condition = " ("; 
    for($j=0;$j<$columnCount;$j++) 
    { 
    // but each word can match any column, doesn't matter which one. 
    // that's why we are using the 'OR' operator here. 
    if ($j > 0) $condition .= " OR "; 
    $column = $columns[$j]; 
    $condition .= " {$column} like '%{$word}%' "; 
    } 
    $condition .= ") "; 
    $query .= $condition; 
} 
echo $query; 

這裏的竅門是,在運行時構建SQL,它會根據單詞的用戶已經使用的數量產生一個完全不同的查詢。

+0

是的,我使用的結果集 –

+0

我是新來的PHP我會解釋我有記錄包含州地區代碼等..現在我有搜索形式,當我輸入任何州名稱其顯示所有行匹配的狀態,但是當我給國家和地區的名稱,它應該只顯示哪些是匹配州和地區不是所有國家的代碼 –

+0

@RaviShankar但是我不清楚,你如何確定輸入的值是州名還是地區名?如果您只想嚴格篩選包含所有關鍵字的記錄,則需要確切地知道用戶輸入了哪種類型的關鍵字。因爲如果你過濾錯誤的列,你根本得不到任何結果。 – bvdb

0

我假設你只得到一行。您需要用逗號替換字符串中的空格,並使用類似這樣的內容。 ($ searchq)中的城市或($ searchq中的)城市或($ searchq)中的代碼中的狀態「;

0

你正走錯了方向。您正在以if條件打印表格。您應該在foreach循環中執行printing部分。您只需在foreach循環之外定義<table>

你必須使用foreach循環

<table> 
    <?php 
     $result = mysql_query($query); 
     if (!$result) 
     { 
      while ($row = mysql_fetch_array($result)) 
      { 
      foreach ($row as $key => $value) 
      { 
       <tr> /* (print the values) */ </tr> 
      } 
      } 
     } 
?> 
</table> 

注:

請停止使用mysql*,開始使用mysqli*功能

0
include('dbConnect.inc.php'); 

//collect 
    if(!isset($_POST['search'])){ 
    header("Location:index.php"); 

} 
$searchq = mysql_real_escape_string($_POST['search']); 
$search_sql = "SELECT * FROM `bankifscin` WHERE STATE='%$searchq%' and`enter code here` CITY= '%$searchq%'"; 
$search_query = mysql_query($search_sql) or die(mysql_error()); 
if(mysql_num_rows($search_query)!=0){ 
$search_rs = mysql_fetch_assoc($search_query); 
} 
+0

你的問題在於你的用戶界面。當*搜索條件*(不*關鍵字*)'Kerla'和'Town'被傳遞給查詢時,查詢應該知道如何處理它們。 – Strawberry