2012-05-15 3 views
2

인터넷을 여러 가지 방법으로 검색했지만 내 질문에 대한 답을 찾을 수 없습니다. 나는 웹 사이트 개발을 가르치고 온라인 부동산 웹 사이트를 만들려고 노력 중이다.PHP를 사용하여 MySQL에서 여러 열 검색

속성을 검색하려고하면 내 문제가 발생합니다. 예를 들어 특정 지역이나 우편 번호의 모든 속성을 검색하려고합니다. 주소 입력란 1, 주소 입력란 2, 우편 번호 및 지역 (예 : London SW1V)과 같은 여러 입력란을 검색하려고합니다.

SELECT property.propertyid, property.propertyname 
FROM property 
WHERE property.address_1 LIKE '%txtSearchField%' 
    OR property.address_2 LIKE '%txtSearchField%' 
    OR property.postcode LIKE '%txtSearchField%' 
    OR property.area  LIKE '%txtSearchField%' 
+1

정확히 문제가 무엇입니까? 검색어가 괜찮아 보입니다. 실제로 변수를 보간하고 "txtSearchField"에 대한 테이블을 검색하지 않는다는 것을 확인할 수 있습니까? – Rawkode

+0

당신은 조인 쿼리를 사용하지 않는 경우 속성 앞에 테이블 이름을 넣을 필요가 없습니다. propertyId, propertyname, ...을 사용할 수 있습니다. – jbduzan

답변

2

이 SQL 쿼리 구성에서는 txtSearchField의 값이 무엇이든 상관없이 실행합니다 (비어있는 경우에도 해당). 변수 txtSearchField 앞에 달러 기호 $를 쓰는 것을 잊어 버렸기 때문에 변수 $txtSearchField의 내용이 아닌 항상 텍스트 txtSearchField을 검색하므로 입력 양식에서 결과를 얻을 수 없습니다. (나는 당신이 txtSearchField라고하는 HTML 텍스트 입력을 가진 입력 폼을 사용한다고 생각합니다). 생략 할 경우 기본값은 "get"이므로 HTML 양식의 메서드를 "게시"로 설정하십시오.

난`오른쪽 경우에는이 방법으로 코드를 재 작업해야

<?php 
    //Sanitize user input 
    $txtSearchField = filter_var($_POST['txtSearchField'], FILTER_SANITIZE_STRING); 
    //SQL query 
    $query = "SELECT property.propertyid, property.propertyname 
    FROM property 
    WHERE CONCAT(property.address_1, ' ', 
        property.address_2, ' ', 
        property.postcode, ' ', 
        property.area) LIKE '%$txtSearchField%'" //see the $ sign here 
//Finally, execute query and get result 
$result = mysql_query ($query) or die ('SQL error occured: '.mysql_error()); 
while ($array = mysql_fetch_assoc($result)) { 
    echo $result['address_1'].'/'.$result['address_2'].'/'.$result['postcode'].'/'.$result['area'].'<br/>'; 
} 
    ?> 
4

아니고 효율적인 방법하지만 트래픽이 적은 페이지에 대한 가장 쉽고 좋은 :

다음

내가 현재 사용하고, 내가 원하는 방식으로 작동을 변경할 수 있도록 노력하겠습니다있어 쿼리입니다
SELECT property.propertyid, property.propertyname 
FROM property 
WHERE CONCAT(property.address_1, ' ', 
       property.address_2, ' ', 
       property.postcode, ' ', 
       property.area) LIKE '%txtSearchField%' 

이 방법이 유용 할 것입니다.

관련 문제