2014-04-20 3 views
0

저는 PHP와 MySQL 모두에 대해 매우 익숙하며 가수의 작은 라이브러리를 만들려고합니다. 견적 자체, 가수의 이름 또는 가수의 밴드 (있는 경우)의 일부를 입력하여 사용자가 견적을 검색 할 수있게하고 싶습니다. 이제조건부 필터를 사용하여 MySQL 쿼리를 작성하는 방법은 무엇입니까?

, 나는 거의 못을 박았다 부분 : 그것은 SEARCH_STRING이 단어의 중간에 결과를 반환 alors 있지만

$query = 'SELECT * FROM quotes WHERE (quote LIKE "%'.$search_string.'%" OR singerName LIKE "%'.$search_string.'%" OR bandName LIKE "%'.$search_string.'%")'; 

이 작품 : 나는 "그녀"를 입력하는 경우를, 그것은 모든를 반환합니다 "다른"또는 "함께"포함 된 견적. 쿼리에서 두 번째 %를 삭제하면 search_string이 원하는 첫 번째 단어가 아닌 따옴표가 반환되지 않습니다.

어쨌든 내가하고 싶은 것은 결과를 필터링 할 수있는 가능성을 부여하는 것입니다. 라디오 버튼을 통해 사용자가 영어, 독일어 또는 둘 다 따옴표 만 표시 할 수있게하려는 경우, 기본적으로 Both가 선택되므로 위의 $ 쿼리는 여전히 유효합니다. 그러나 사용자가 영어를 선택하면 AND (language = 'EN')과 같이 표시되어야합니다. 없이,

if ($_POST['language']== "EN") { 
    $sql .= " AND (language = 'EN')"; 
} 

그것은 작동하지만, 나는 또한 사용자는 필터를 사용하여 따옴표를 검색 할로는 진짜 번거 로움 될 수 있습니다 지금은

, 나는 쿼리에이 방법을 추가하는 시도 검색어 입력 : 그들은 Band의 가수가 영어로 따옴표를 찾을 수 있습니다.

if (strlen($search_string) < 1) { 
    $sql = "SELECT * FROM quotes"; 
} 

을하지만 그때는 $sql .= " AND (language = 'EN')"; 같이 "AND" "WHERE"해야한다, 더 이상 정확하지 않을 것이다 : 그래서, 난이 있습니다. 그래서 문자열을 수정하기 위해 또 다른 if 절을 가져야하고, 적용하기로 결정한 모든 필터에 대해 또 다른 절을 사용해야합니다.

내 질문은 다음이다 : 어떻게 옵션 필터가 주어진, 내 쿼리를 작성해야하고, 검색도 필터 만 를 사용하여 가능해야한다고?

감사합니다.

답변

1

항상 WHERE 절을 갖기 위해 항상 참 조건을 설정하십시오.

$sql = "SELECT * FROM myTable WHERE 1 = 1 " 
if (true) { 
    $sql .= " AND col1 LIKE '%val%' "; 
} 
+0

또한 당신은 당신이 원하지 않는 검색 결과를 제외 할 수 있습니다 정규 표현식 사용이 방법을 확인 https://dev.mysql.com/doc/refman/5.1/en/regexp.html 수처럼 사용하려는 해달라고하면 – Tyranicangel

관련 문제