2013-02-26 3 views
-1
SELECT wposts.*, wpostmeta.* 
FROM wp_posts wposts, wp_postmeta wpostmeta, wp_postmeta wpostmeta2, wp_postmeta wpostmeta3 
WHERE 
     wposts.ID = wpostmeta.post_id 
    AND wposts.ID = wpostmeta2.post_id 
    AND wposts.ID = wpostmeta3.post_id 
    AND wpostmeta.meta_key = 'listing_subtype' 
    AND wpostmeta.meta_value = 'Seattle' 
    AND wpostmeta2.meta_key = 'district' 
    AND wpostmeta2.meta_value = 'Breadview' 
    AND wpostmeta3.meta_key = 'price_current' 
    AND wpostmeta3.meta_value BETWEEN 0 AND 800000 
    AND wposts.post_status = 'publish' 
    AND wposts.post_type = 'vreb_property' 
ORDER BY wposts.post_date DESC 
LIMIT 0, 20 

저는이 쿼리를보고 있으며 효율성을 향상시켜야한다고 생각합니다. 그리고 저는 많은 변형을 실험 해 왔습니다. SO 입력을 요구하는 것이 가장 좋을 것이라고 생각합니다.멀티 및 쿼리 개선

+0

음,이 내가 두려워하는 모든 것, 모른 채 : 정말 필요한이를 최적화 할 수있는 유일한 방법은 스스로에게 물어이다 "수행이 모든 ? " 추가 :'EXPLAIN SELECT ... '도움 : – KingCrunch

+0

정확히 무엇을하려합니까? 왜 다른 열에'1/2/3'을 원합니까? –

+0

나는이 질의를보고있다. 포스터에 의도에 대한 설명이 포함되어 있다면 그렇게 생각하지 않을 것이다. –

답변

0

group byhaving 절을 사용하여이 작업을 수행하려고합니다. 게시물 목록을 얻으려면 :

select p.id 
from wp_post_meta p 
group by p.id 
having sum(case when p.meta_key = 'listing_subtype' and p.meta_value = 'Seattle' 
       then 1 else 0 end) > 0 and 
     sum(case when p.meta_key = 'district' and p.meta_value = 'Breadview' 
       then 1 else 0 end) > 0 and 
     sum(case when p.meta_key = 'price_current' and cast(p.meta_value as float) BETWEEN 0 AND 800000 
       then 1 else 0 end) > 0 

참고 :이 태그는 구문 오류가있을 수 있으므로 테스트되지 않았습니다.

모든 정보를 얻을 게시물을 다시 가입하려면

select p.* 
from wp_posts p join 
    (select p.id 
     from wp_post_meta p 
     group by p.id 
     having sum(case when p.meta_key = 'listing_subtype' and p.meta_value = 'Seattle' 
         then 1 else 0 end) > 0 and 
      sum(case when p.meta_key = 'district' and p.meta_value = 'Breadview' 
         then 1 else 0 end) > 0 and 
      sum(case when p.meta_key = 'price_current' and cast(p.meta_value as float) BETWEEN 0 AND 800000 
         then 1 else 0 end) > 0 
    ) p2 
    on p.id = p2.id 
+0

테이블'wpostmeta'을 잊어 버렸습니다 : – KingCrunch

+0

구문 오류, 두렵습니다. – dcolumbus

+0

@ dcolumbus. . . 확실한 구문 오류가 수정되었습니다. –