0
SELECT
`wp_posts`.`post_title`
, `wp_posts`.`post_content`
, `wp_posts`.`post_type`
, `wp_posts`.`ID`
, `wp_posts`.`post_date`
, `wp_usermeta`.`user_id` AS `userID`
, `wp_usermeta`.`meta_value` AS `city`
, `wp_usermeta`.`meta_value` AS `state`
, `wp_users`.`fbconnect_userid` AS `fbuid`
FROM    `wp_posts`    
INNER JOIN `wp_emu_shop_reviews`         
    ON (`wp_posts`.`ID` = `wp_emu_shop_reviews`.`postID`)
LEFT JOIN `wp_users`                
    ON (`wp_emu_shop_reviews`.`wpUserID` = `wp_users`.`ID`)
LEFT JOIN `wp_usermeta`              
    ON (`wp_users`.`ID` = `wp_usermeta`.`user_id` AND `wp_usermeta`.`meta_key` ='location_city')
        OR(`wp_users`.`ID` = `wp_usermeta`.`user_id` AND `wp_usermeta`.`meta_key` ='location_state')
WHERE (`wp_posts`.`post_type` = "review"
AND `wp_posts`.`post_status` = "publish");

うまくいかない部分は、都市と州を結果に取り入れることです。現在のクエリでは、都市が都市と州の両方の列に配置されます。明らかに、最後の結合が問題です。

"This is the title" "blahblahblah"  "review"    "2074"  "2012-05-03 00:03:10"   "15"    "Redmond"   "Redmond"   "xxxxxxxx"

おそらくwp_usermetaテーブルからより多くの値を取得する必要がありますが、誰かが私にこの質問をしてくれれば、それを理解できると確信しています。

ああ..JurisMalinensとExplosionPillsからのアドバイスで、私はこのクエリを機能させたと思います。

SELECT
`wp_posts`.`post_title`
/* , `wp_posts`.`post_content` */
, `wp_posts`.`post_type`
, `wp_posts`.`ID`
, `wp_posts`.`post_date`
/* , `wp_usermeta`.`user_id` AS `userID` */
, um1.user_id AS `userID` 
, um1.meta_value AS `city`
, um2.meta_value AS `state`
, `wp_users`.`fbconnect_userid` AS `fbuid`
FROM    `wp_posts`    
INNER JOIN `wp_emu_shop_reviews`         
ON (`wp_posts`.`ID` = `wp_emu_shop_reviews`.`postID`)
LEFT JOIN `wp_users`                
ON (`wp_emu_shop_reviews`.`wpUserID` = `wp_users`.`ID`)
/*  LEFT JOIN `wp_usermeta`              
ON (`wp_users`.`ID` = `wp_usermeta`.`user_id` AND `wp_usermeta`.`meta_key` ='location_city') */
LEFT JOIN wp_usermeta um1 ON (`wp_users`.`ID` = `um1`.`user_id` AND um1.meta_key ='location_city') 
LEFT JOIN wp_usermeta um2 ON(`wp_users`.`ID` = `um2`.`user_id` AND um2.meta_key ='location_state')

WHERE (`wp_posts`.`post_type` = "review"
AND `wp_posts`.`post_status` = "publish");
4

1 に答える 1

2

クエリには、特定の行に対して結合するメタ値を知る方法がなく、実際、現在のクエリでは不可能です (つまり、一度に 1 つしか結合できません)。wp_usermeta2 回参加する必要があります。

SELECT
    state.user_id AS userID
    state.meta_value AS state,
    city.meta_value AS city,
FROM
    wp_users
    JOIN wp_usermeta state ON (wp_users.ID = state.user_id
       AND state.meta_key = 'location_state')
    JOIN wp_usermeta city ON (wp_users.ID = city.user_id
       AND state.meta_key = 'location_city')

それがあなたがしなければならないことの要点です。他の結合と条件を追加するだけです。

于 2013-03-21T14:55:00.367 に答える