2017-04-25 51 views
-1

我的語言表:查找至少一個子字符串中的

用戶

Id languages 
    -------------------------- 
    1 english,french,german 
    2 english,german 
    3 english,french 
    4 french 

而且我有一個下拉選框(下圖)的列表。 我想讓用戶能夠搜索某種語言的子字符串,這些語言在每個id在用戶表中提供的語言之內。

例如 - 如果勾選「法國」將是標誌,然後它會給網頁上的ID 1 3和4

的我想用的結果「發現組」功能,但怎麼樣?

這是代碼:

$query = "select * from where 1=1,..." 

$query.=" AND 
find_in_set(ITEM1 of checkboxes selected, languages) <> 0 OR 
find_in_set(ITEM2 of of checkboxes selected ,languages) <> 0 OR ... 
etc. 

任何建議:

  var expanded = false; 

     function showCheckboxes() { 
      var checkboxes = document.getElementById("checkboxes"); 
      if (!expanded) { 
      checkboxes.style.display = "block"; 
      expanded = true; 
      } else { 
      checkboxes.style.display = "none"; 
      expanded = false; 
      } 
     } 
     </script> 

<tr> 
     <td>Languages</td> 
     <td dir="rtl"> 

      <form method="post" action="exxx.php"> 
      <div class="multiselect" dir="rtl"> 
      <div class="selectBox" onclick="showCheckboxes()" dir="rtl"> 
     <select> 
     <option>choose:</option> 
     </select> 
     <div class="overSelect" dir="rtl"></div> 
     </div> 
     <div id="checkboxes"> 
     <label for="one"> 
      <input type="checkbox" id="one" name="languages[]" 
      value="english">english</label> 
      <label for="two"> 
      <input type="checkbox" id="two" name="languages[]" value="french" 
      >french</label> 
      <label for="three"> 
      <input type="checkbox" id="three" name="languages[]" 
      value="arabic">german</label> 
     </div> 
    </div> 
    <input type="submit" name="submit"> 
    </form> 

現在,這種「語言」欄是我的,所以我想提取這個查詢一些搜索領域之一?

即使我會規範化表格:我的問題主要是從下拉列表中獲取值並通過它們進行搜索。我不知道有多少物品被選中,所以我不能寫

Select where languages = '$languages[0]' OR languages='languages[1]' 

我會扔我抵消我只有一個選定。

+2

這將是如此容易:如何用PDO準備語句來做到這一個簡單的例子http://www.1keydata.com/database-normalization/first-normal -form-1nf.php – nogad

+0

我的問題主要是從下拉列表中獲取值並由它們搜索。 – Toto88

+0

如果它被標準化,您可以使用WHERE ... IN。 –

回答

1

而是在用戶表中的一列列出的語言,創建另一個表將用戶鏈接到的語言,像這樣:

user_languages: 

user_id language 
    1  english 
    1  french 
    1  german 
    2  english 
    2  german 
    3  english 
    3  french 
    4  french 

然後你就可以使用the IN operator與列表匹配的行來自您的複選框的值。

SELECT DISTINCT user_id FROM user_languages WHERE language IN('french','german') 

這將適用於任何數量的選中複選框。如果你只是標準化的DB數據

$placeholders = rtrim(str_repeat('?,', count($_POST['languages']))); 
$sql = "SELECT DISTINCT user_id FROM user_languages WHERE language IN($placeholders)"; 
$statement = $pdo->prepare($sql); 
$statement->execute($_POST['languages']); 
$ids = $statement->fetchAll(PDO::FETCH_COLUMN); 
+0

有沒有辦法寫這個沒有pdo? – Toto88

+0

當然,你可以改爲一個不同的數據庫擴展mysqli,如果你的數據庫是MySQL。 –

+0

如何在MySQL中規範一個表格?你能給我一個幫助嗎?謝謝! – Toto88

相關問題