2016-04-03 86 views
-3

我有一套存儲在學校表中每行中的機構名稱。同一張表有四個不同的類別列,它們存儲他們提供的主題名稱。我想啓用一個功能,用戶在桌子上進行搜索以找出教授特定主題的機構的所有名稱(例如:物理學)。特定主題的名稱可以存儲在四個category列中的任何一箇中。請建議使用mysqli_/mysql_查詢來進行此類搜索,或者如果您願意,可以建議一個可實現上述功能的PHP腳本。
編輯:我提下表結構:
Table showing column values
Table structure在多列中搜索關鍵字

添加各種不同的查詢,我都沒有結果的嘗試:

$query = mysql_query("SELECT name FROM institutes WHERE MATCH(category1, category2, category3, category4) AGAINST('$searchq' IN BOOLEAN MODE)") or die(" No records found."); 


$query = mysql_query("SELECT name FROM institutes WHERE $searchq IN(category1, category2, category3, category4)") or die(" No records found."); 


$query = mysql_query("SELECT name FROM institutes WHERE category1 LIKE '%$searchq%' OR category2 LIKE '%$searchq%' OR category3 LIKE '%$searchq%' OR category4 LIKE '%$searchq%' OR category5 LIKE '%$searchq%'") or die(" No records found."); 

搜索表單:

<div class="row col-md-6 col-md-offset-2"> 
     <div class="col-lg-6"> 
      <div class="input-group"> 
       <form action="search_results.php" method = "post"> 
        <input type="text" name="search" class="form-control" placeholder="Search by subjects..."> 

       <span class="input-group-btn"> 
        <button class="btn btn-default" type="button submit">Go!</button> 
       </span> 
       </form> 

      </div><!-- /input-group --> 
     </div> 
    </div> 

整個PHP代碼:

<?php 
    mysql_connect("localhost", "root", "secretpassword") or die("could not connect."); 
    mysql_select_db("edhoc") or die("could not find database."); 
    $result = ""; 

    //collect info from database 
    if(isset($_POST['search'])) { 
     $searchq = $_POST['search']; 
     $searchq = preg_replace("#[^0-9a-z]#i", "", $searchq); 
     //echo $searchq; 

     //SQL query 
     $query = mysql_query("SELECT name FROM institutes WHERE category1 = '$searchq' OR category2 = '$searchq' OR category3 = '$searchq' OR category4 = '$searchq' OR category5 = '$searchq'") or die(" No records found."); 
     $count = mysql_num_rows($query); 
     if($count == 0) { 
      $output = "There's no search result"; 
     } else { 
      while($array = mysql_fetch_assoc($query)) { 
?> 
       <li><?php echo $array['name'];?></li> 
<?php 
      } 
     } 
    } 
?> 

他們中沒有產生所需的輸出。 當physics是搜索串的電流輸出爲:

物理學沒有找到記錄。

physics是搜索字符串,所需的輸出是:

  • 邦薩爾類研究中心
  • 共振Eduventures私人有限公司


+1

[跨多個列搜索]的可能重複(http://stackoverflow.com/questions/36371155/searching-across-multiple-columns) – NineBerry

+0

這是您24小時內第三次詢問同樣的問題。這個(多次詢問相同的問題)在Stack Overflow中被認爲是非常粗魯的。 – NineBerry

+0

@NineBerry我道歉。我不打算粗魯。如果有的話,我正在絕望。 – Mickey

回答

0

您有以下命令:

$query = mysql_query("SELECT ....") or die("No records found."); 

然而,當執行沖模(似乎是這樣,因爲「沒有找到記錄」是輸出),那麼這並不意味着沒有記錄被找到。這意味着執行sql語句時出錯。所以在sql語句中有一個錯誤,或者數據庫連接有問題。修改這樣的專線,以獲得特定錯誤消息:由於SQL語句失敗

$query = mysql_query("SELECT ....") or die(mysql_error()); 

,但你仍然可以得到(甚至是錯誤消息之前)中列出的相同的五個機構的名稱,這意味着機構名稱的列表你看到的不是來自你的問題的PHP代碼,而是來自其他地方。

+1

你幫我修好了,差不多。但首先,我會清除我的錯誤。存儲數據庫的包含文件具有自己的select語句,只要建立連接,就會立即打印所有insti名稱。接下來,我從我從數據庫中刪除「category5」列後不小心忘記刪除的代碼中刪除了category5檢查。在完成必要的代碼糾正之後,我得到正確的輸出,但有一件事。在輸出之上,有文本「1Resource id#6」爲什麼顯示以及如何刪除它? – Mickey

+0

輸出「1Resource id#6」表示在某處回顯了一個變量,該變量是諸如mysql_connect()或mysql_query()之類的函數的返回值,因此請查找回顯這些類型函數返回的變量的地方。 – NineBerry

+1

兩者都是粗心大意的錯誤,我很抱歉浪費大家的時間。我會在未來發布更多的智力問題。當我獲得足夠的聲望時,我會回到這裏,並提出你的答案。謝謝,我希望你能想象我是多麼的安心。請注意其他新用戶:請勿發佈感謝信息。 – Mickey

1

我們不」可能的答案,因爲你不給表結構因爲它很容易閱讀,所以我會假設一個。

Select school from schooltable where subject1=? or subject2=? or subject3=? 

?是搜索查詢,如果您無法在PHP回覆中實現它,我會爲您寫。 如果我沒有得到你,這是你的問題,你沒有足夠的解釋。

+0

我編輯了問題並添加了儘可能多的信息(以及表結構)。是的,如果你可以寫一個php代碼來獲得理想的結果,它將是一種解脫。 – Mickey

+0

你試過我發佈的那個嗎? – moawaya

+0

請嘗試像那樣query = mysql_query(「SELECT name FROM institutes WHERE category1 ='%$ searchq%'或 category2 ='%$ searchq%'或 category3 ='%$ searchq%'或 category4 ='%$ searchq%'OR category5 ='%$ searchq%'「) or die(」No records found。「); – moawaya