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

물론 다른 데이터베이스 확장이 가능합니다. MySQL. –

+0

어떻게 mysql에서 테이블을 정규화 할 수 있습니까? 저에게 littel 도움을 줄 수 있습니까? 감사합니다! – Toto88