2017-04-25 65 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

相关问题