2012-10-01 6 views
0

사용자 정의 필드의 고유 값 "portata"을 카테고리 및 기타 사용자 정의 필드로 필터링하려고합니다. 내가 필터에 다른 사용자 정의 필드에 추가 할 수있는 방법카테고리 및 사용자 정의 필드에 의한 WordPress의 고급 SQL 쿼리

global $wpdb; 
$querystr2 = " 
SELECT DISTINCT wpostmeta.meta_value 
FROM $wpdb->posts wposts 
LEFT JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 


WHERE wpostmeta.meta_key = 'portata' 
AND $wpdb->term_taxonomy.taxonomy = 'category' 
AND $wpdb->term_taxonomy.term_id IN($variabile_c) 
ORDER BY wpostmeta.meta_value ASC 

"; 

:

이 카테고리의 사용자 정의 값을 선택하는 쿼리는?

답변

0

당신은 각 가입에 대해 별도의 별칭을 사용하여, 다시 $ wpdb-> postmeta에 가입해야하고, 추가 조건을 적용하기 위해 WHERE 절에 AND 연산의 몇 가지를 추가 할 것 - 같은 :

SELECT DISTINCT wpostmeta1.meta_value 
    FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta1 ON wposts.ID = wpostmeta1.post_id 
    LEFT JOIN $wpdb->postmeta wpostmeta2 ON wposts.ID = wpostmeta2.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
    WHERE wpostmeta1.meta_key = 'portata' 
    AND wpostmeta2.meta_key = 'other-custom-field-value' 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN($variabile_c) 
    ORDER BY wpostmeta1.meta_value ASC 

'other-custom-field-value'를 필터링해야하는 두 번째 사용자 지정 필드 값으로 바꿉니다.

+0

감사합니다. 이제 작동합니다! – user1712790

+0

다행스럽게도 도움이 될 수있어서 기꺼이 도와 드리겠습니다. 답변을 수락하면 명성 혜택을받을 수 있습니다. 감사! –

0

감사합니다. Aaron Miller! 이제 작동합니다!

SELECT DISTINCT wpostmeta1.meta_value 
FROM $wpdb->posts wposts 
    LEFT JOIN $wpdb->postmeta wpostmeta1 ON wposts.ID = wpostmeta1.post_id 
    LEFT JOIN $wpdb->postmeta wpostmeta2 ON wposts.ID = wpostmeta2.post_id 
    LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) 
    LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE wpostmeta1.meta_key = 'portata' 
    AND wpostmeta2.meta_key = 'alimentazione' 
AND wpostmeta2.meta_value = '$variabile_portata' 
    AND $wpdb->term_taxonomy.taxonomy = 'category' 
    AND $wpdb->term_taxonomy.term_id IN($variabile_c) 
ORDER BY wpostmeta1.meta_value ASC 

감사합니다. Aaron Miller. 이제 사용자 정의 필드로 1 개의 다른 파일러를 원한다면 1 개의 왼쪽 결합을 추가해야합니까? 덕분에 !

+0

각 조인에 고유 한 별칭을 사용하여 $ wpdb-> postmeta에 대해 사용자 지정 필드 필터 당 한 번 가입해야합니다. 여기서 별칭은 wpostmeta1 및 wpostmeta2이므로 wpostmeta3 및 c를 추가 할 수 있습니다. 여러 개의 왼쪽 조인을 추가하면 필터링 할 데이터베이스 엔진에 대해 매우 큰 결과 집합이 생성되는 경향이 있습니다. 인덱스가 양호하지 않거나 많은 수의 인덱스가있는 경우 시간이 오래 걸릴 수 있습니다. 정의 된 사용자 정의 필드. –

관련 문제