1
SELECT
`wp_emu_theme_contact_page`.`firstName`
, `wp_emu_theme_contact_page`.`city`
, `wp_emu_theme_contact_page`.`state`
, `wp_posts`.`post_content`
, `wp_posts`.`post_date`
, `wp_posts`.`post_type`
, `wp_posts`.`ID`
, `wp_emu_theme_testimonials`.`permission`
, `wp_emu_theme_testimonials`.`userID`
, `wp_users`.`user_login`
, `wp_usermeta`.`meta_value`
FROM
 `wp_emu_theme_testimonials`
INNER JOIN  `wp_emu_theme_contact_page` 
    ON (`wp_emu_theme_testimonials`.`contactID` = `wp_emu_theme_contact_page`.`dbID`)
INNER JOIN  `wp_posts` 
    ON (`wp_emu_theme_testimonials`.`postID` = `wp_posts`.`ID`)
LEFT JOIN  `wp_users` 
    ON (`wp_emu_theme_testimonials`.`userID` = `wp_users`.`ID`)
INNER JOIN  `wp_usermeta` 
    ON (`wp_usermeta`.`user_id` = `wp_users`.`ID`)
WHERE (`wp_posts`.`post_type` ='testimonial'
AND `wp_usermeta`.`meta_key` ='facebook_uid')
OR (`wp_usermeta`.`meta_key` = 'null');

問題は、テーブルwp_usermetaに meta_key = 'facebook_uid' がない可能性があることです。その場合、私はそれらのエントリを取得していません。meta_keyそのために存在しない場合でも、他のすべてのものを取得したいuser_id。もしそうなら、素晴らしいです。そのテーブルに関する部分を取り出すと、このクエリは期待どおりに機能します。ORなしで試しました。私はmysqlを使用しています。

4

4 に答える 4

3

LEFT JOINの条件部分を使用して作成したいようですON

LEFT JOIN  `wp_usermeta` 
    ON (`wp_usermeta`.`user_id` = `wp_users`.`ID`
        AND `wp_usermeta`.`meta_key` ='facebook_uid')
于 2012-08-09T05:26:31.493 に答える
1

LEFT JOINの代わりに使用する必要がありますINNER JOIN

于 2012-08-09T05:24:12.523 に答える
0

I use T-SQL (MS SQL Server), not MySQL, so take what I say with a grain of salt.

I am not sure that you are checking for null correctly:

OR (`wp_usermeta`.`meta_key` = 'null'); 

Can you check for NULL that way? in SQL Server you need to use IS NULL to check, and this article (http://www.tutorialspoint.com/mysql/mysql-null-values.htm) seems to say that it is the same in MySQL. If you change the or to say somthing like

OR (`wp_usermeta`.`meta_key` IS NULL);

you might get what you want. ALso, I am not sure how parens work in MySQL, but I would do it like this:

WHERE `wp_posts`.`post_type` ='testimonial'          
AND (`wp_usermeta`.`meta_key` ='facebook_uid' OR `wp_usermeta`.`meta_key` IS NULL);

Now, having said all of that, you should still consider making it a left join to the table, as others have suggested. It might give you better performance than using an or anyway.

于 2012-08-09T05:52:01.920 に答える
0
SELECT
`wp_emu_theme_contact_page`.`firstName`
,`wp_emu_theme_contact_page`.`city`
, `wp_emu_theme_contact_page`.`state`
, `wp_posts`.`post_content`
, `wp_posts`.`post_date`
, `wp_posts`.`post_type`
, `wp_posts`.`ID`
, `wp_emu_theme_testimonials`.`permission`
, `wp_emu_theme_testimonials`.`userID`
, `wp_users`.`user_login`
, `wp_usermeta`.`meta_value`
FROM
`wp_emu_theme_testimonials`
INNER JOIN  `wp_emu_theme_contact_page` 
ON (`wp_emu_theme_testimonials`.`contactID` = `wp_emu_theme_contact_page`.`dbID`)
INNER JOIN  `wp_posts` 
ON (`wp_emu_theme_testimonials`.`postID` = `wp_posts`.`ID`)
LEFT JOIN  `wp_users` 
ON (`wp_emu_theme_testimonials`.`userID` = `wp_users`.`ID`)
LEFT JOIN  `wp_usermeta` 
ON (`wp_users`.`ID` = `wp_usermeta`.`user_id`)
WHERE (`wp_posts`.`post_type` ='testimonial'
AND `wp_usermeta`.`meta_key` ='facebook_uid')
OR (`wp_usermeta`.`meta_key` IS NULL);

この状況では、内部結合の代わりに左結合を使用します。

于 2012-08-09T05:38:40.303 に答える