2013-10-17 2 views
0

나는 이것을 알아 내려고 노력하면서 대부분의 시간을 보냈습니다. 전문가들에게 물어볼 시간 인 것 같아요 : WordPress 밖에있는 내 WordPress DB에 액세스하려고합니다. 난 다소 복잡한 WordPress 데이터베이스에서 출력을 얻을 쿼리를 작성합니다.
meta_values ​​및 meta_keys를 사용하여 게시물 또는 사용자에 대한 데이터를 여러 행에 저장하는 여러 테이블이 DB에 있습니다. 자신과 서로에게 테이블에 합류하기

ID | post_type | post_status 
----+-----------+------------ 
2001| shop_order| publish 

표 wp_posts

:

object_id | term_taxonomy_id 
----------+----------------- 
2001  | 190 

표 wp_term_relationships

테이블 : wp_postmeta

post_id | meta_key  | meta_value 
---------+-----------------+------------ 
2001  | _customer_user | 3 
2001  |order_description| smith 
2001  | _order_total | 300 

테이블 예를 들어
는 여기에 내가로부터 끌어해야 할 네 개의 테이블입니다 : wp_usermeta

내가 원하는 다른 지역에서 그러나

SELECT wp_posts.ID, wp_posts.post_title,ot.meta_value as total,od.meta_value as order_desc, cu.meta_value as customer     
     FROM wp_posts 
     LEFT JOIN wp_postmeta AS ot ON (wp_posts.ID = ot.post_id AND ot.meta_key='_order_total') 
     LEFT JOIN wp_postmeta AS od ON (wp_posts.ID = od.post_id AND od.meta_key='order_description') 
     LEFT JOIN wp_postmeta AS cu ON (wp_posts.ID =cu.post_id AND cu.meta_key='_customer_user') 
     LEFT JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id 
     WHERE wp_posts.post_type = 'shop_order' 
     AND wp_posts.post_status = 'publish' 
     AND wp_term_relationships.term_taxonomy_id = '190' 
     GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC" 

: 6,

user_id | meta_key  |meta_value 
---------+-----------------+---------- 
    3  | first_name  | Andy 
    3  | last_name  | Mccormick 

나는 하나의 행의 주문 번호 (post_id를) 고객 ID, 주문 설명 및 주문 합계를 표시 할 큰 일이 쿼리를 가지고 이름으로 고객을 나열뿐 아니라 ID로 그래서 나는이 같은 wp_usermeta 테이블에서 자신의 성과 이름을 얻으려고 :

SELECT wp_posts.ID, cu.meta_value as customer, fn.meta_vale as fname, ln.meta_value as lname     
       FROM wp_posts 
       LEFT JOIN wp_postmeta AS cu ON (wp_posts.ID = cu.post_id AND cu.meta_key='_customer_user') 
       LEFT JOIN wp_usermeta AS fn ON (cu.meta_key = fn.user_id AND fn.meta_key='first_name') 
       LEFT JOIN wp_usermeta AS ln ON (cu.meta_key = ln.user_id AND ln.meta_key='last_name') 
       LEFT JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id 
       WHERE wp_posts.post_type = 'shop_order' 
       AND wp_posts.post_status = 'publish' 
       AND wp_term_relationships.term_taxonomy_id = '190' 
       GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC; 

나는 또한 시도했다 : LEFT는 AS FN ON wp_usermeta 가입 ((cu.me ta_key = '_ customer_user') = fn.user_id AND fn.meta_key = 'first_name')와 다른 서브 쿼리 등이 있습니다.

분명히 나는 ​​지금 SQL 쿼리에서 나의 급여 등급보다 높기 때문에 어떤 도움도 훌륭 할 것입니다. 감사!

+1

두 번째 쿼리에서 얻은 결과는 무엇입니까? – TheWolf

+0

# 1054 - 당신은 coorect하지만 내가 사용하는 경우 –

답변

1

는 잘 모르겠어요,하지만 당신은 이것을 시도 할 수 있습니다 :

내가 알아 낸 것 것과
SELECT wp_posts.ID, cu.meta_value as customer, fn.meta_vale as fname, ln.meta_value as lname     
       FROM wp_posts 
       LEFT JOIN wp_postmeta AS cu ON (wp_posts.ID = cu.post_id AND cu.meta_key='_customer_user') 
       LEFT JOIN wp_usermeta AS fn ON (cu.meta_value = fn.user_id AND fn.meta_key='first_name') // Note meta_value instead of meta_key 
       LEFT JOIN wp_usermeta AS ln ON (cu.meta_value = ln.user_id AND ln.meta_key='last_name') // Note meta_value instead of meta_key 
       LEFT JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id 
       WHERE wp_posts.post_type = 'shop_order' 
       AND wp_posts.post_status = 'publish' 
       AND wp_term_relationships.term_taxonomy_id = '190' 
       GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC; 

, cu.meta_value는 사용자의 ID가의로 예 3, cu.meta_key 동안 (조회의로)은 '_customer_id'이므로 cu.meta_valuecu.meta_key이 일치해야합니다. WP 설치가 없기 때문에 확인할 수 없습니다.

+0

'필드 목록'에서 알 수없는 열 'fn.meta_vale' LEFT는 AS FN ON wp_usermeta 가입 (cu.meta_key = fn.user_id 및 fn.meta_key = 'FIRST_NAME') LEFT JOIN wp_usermeta as ln ON (cu.meta_key = ln.user_id AND ln.meta_key = 'last_name') 여전히 '# 1054 - 알 수없는'field list '에'fn.meta_vale '열 –

+0

오타가 있다고 생각합니다. 거기에는'fn.meta_value' 대신'fn.meta_vale'이 있습니다. – TheWolf

+0

와우 .. 그게 다야. 감사! 아마도 내 급여 등급을 초과하지 않았을 것입니다. 단지 더 많은 자신감이 필요합니다. –

관련 문제