2012-09-07 6 views
0

이것은 미치게합니다. 나는 할 수있는 일이 쉬운 것처럼 보일 수 없다. 나는 사용 된 RV를 판매하는 Wordpress 사이트에 대한 사용자 정의 검색 기능을 구축 중이다. Woocommerce를 사용하여 제품 카탈로그를 작성합니다 (post_type = post 대신 post_type = product로 제품을 생성하므로 중요하지 않을 수 있음).Wordpress 사용자 정의 검색

차량의 '클래스'(예 : '클래스 A', '클래스 B', '클래스 C'등) 및 '연료 유형'(예 : '가솔린' '디젤', '견인차'). 따라서 각 제품은 동일한 meta_key에 대해 서로 다른 meta_value를 가질 수 있지만, 한 번만 정의 된 각 meta_key를 가질 수 있으며 meta_key 당 하나의 meta_value 만 가질 수 있습니다.

검색 양식의 일부는 다음과 같습니다. 다음 쿼리를 실행하고 결과를 반환하기 위해 전송되는

<h4>Type/Class</h4> 

<label><input type="checkbox" name="a1" value="0" />All Types</label> 
<label><input type="checkbox" name="a2" value="Class A" />"Class A" RV's</label> 
<label><input type="checkbox" name="a3" value="Class B" />"Class B" RV's</label> 
<label><input type="checkbox" name="a4" value="Class C" />"Class C" RV's</label> 
<label><input type="checkbox" name="a5" value="Fifth Wheel" />Fifth Wheel RV's</label> 
<label><input type="checkbox" name="a6" value="Toy Hauler" />Toy Haulers</label> 
<label><input type="checkbox" name="a7" value="Travel Trailer" />Travel Trailer RV's</label> 
<label><input type="checkbox" name="a8" value="Camping Trailer" />Camping Trailers</label> 

<h4>Engine Type</h4> 

<label><input type="checkbox" name="c1" value="0" />All Engine Types</label> 
<label><input type="checkbox" name="c2" value="Gasoline" />Gasoline</label> 
<label><input type="checkbox" name="c3" value="Diesel" />Diesel</label> 
<label><input type="checkbox" name="c4" value="Towable" />Towable</label> 

(가 더하지만이 모든 우리는 순간에 대해 걱정할 필요). 이것은 무엇을

$result = mysql_query(" 
      SELECT * FROM wp_postmeta 
      WHERE 
      (meta_key= 'class' AND (meta_value = '$a2' OR meta_value = '$a3' OR meta_value = '$a4' OR meta_value = '$a5' OR meta_value = '$a6' OR meta_value = '$a7' OR meta_value = '$a8')) 
      "); 

이 상자를 선택하면, 인 true 매개 변수 (1) 선택한 옵션 (들)에 대한 URL의 옵션 (예. site.com/search/?a2=1 전달 & 'Class A'및 'Class C'가 선택된 경우 a4 = 1). 이것은 잘 작동하는 것 같습니다.

그러나

, 내가 다른 meta_key의 조합 검색을 시도하고 새로운 쿼리를 사용하여 값의 ...

$result = mysql_query(" 
      SELECT * FROM wp_postmeta 
      WHERE 
      (meta_key= 'class' AND (meta_value = '$a2' OR meta_value = '$a3' OR meta_value = '$a4' OR meta_value = '$a5' OR meta_value = '$a6' OR meta_value = '$a7' OR meta_value = '$a8')) 
      AND 
      (meta_key= 'fuel' AND (meta_value = '$c2' OR meta_value = '$c3' OR meta_value = '$c4')) 
      "); 

... 그것은 더 이상 작동하지 않습니다 :(각 meta_key 문은 독립적으로 작동합니다 이상하지만 그것은 작동하지 않습니다. 이상하게도, 내가 5 행에서 OR로 변경하면 작동하지만 검색 결과를 반환하지 않으므로 검색 결과를 반환하지 않습니다. 그것을 좁히십시오.

어떤 도움을 주셔서 감사합니다. 누군가가 이것을 어떻게 풀어 낼지 알고 있다면 다른 방법을 시도해 볼 의향이 있습니다. ould이 모든 잘못에 대해 가야합니다. 저는 디자이너로서 처음으로 최근에 프로그래머로 바뀌었고 제 수준의 전문 기술은 중급 수준이기 때문에 친절하게 대해주십시오.

답변

3

SQL 쿼리 작성 방법에 오류가 있습니다. wp_postmeta의 각 레코드는 하나의 meta_key 값만 가질 수 있지만 여러 메타 키 값과 일치 시키려합니다. 따라서 어떤 레코드도 사용자의 쿼리와 일치하지 않으므로 결과가 표시되지 않습니다.

데이터를 찾으려면 찾고자하는 고유 한 meta_key 조건마다 테이블을 조인해야합니다.

이와 비슷한 것이 당신이 찾고있는 것이어야합니다.

SELECT distinct(m1.post_id) as post_id FROM 
    wp_postmeta m1, 
    wp_postmeta m2 
WHERE 
    m1.post_id=m2.post_id AND 
    (m1.meta_key='class' AND (m1.meta_value IN ('$a2','$a3','$a4','$a5','$a6','$a7','$a8'))) AND 
    (m2.meta_key='fuel' AND (m2.meta_value IN ('$c2','$c3','$c4'))) 

검색 옵션을 기반으로 SQL 쿼리를 작성해야합니다.

+0

빙고! 그것은 나를 올바른 방향으로 움직이게합니다. 고마워요! – CChoma

관련 문제