2012-01-08 17 views
7

userPosts.value可以包含兩個值之一:0或1MySQL的顯示行,其中值爲NULL或等於X

我左側的接合部userPosts到我的職位表。

我想從我的Posts表中的所有帖子userPosts.value = 0以及所有沒有任何userPosts.value(因此,NULL)的所有帖子。

下只得到了我的帖子,其中value = 0,但沒有NULL:

SELECT * FROM $wpdb->posts 
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID) 
WHERE userPosts.value != 1 
ORDER BY $wpdb->posts.post_date DESC 

下只得到了我的帖子,其中值= NULL:

SELECT * FROM $wpdb->posts 
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID) 
WHERE userPosts.value IS NULL 
ORDER BY $wpdb->posts.post_date DESC 

,但是這會產生任何效果可言:

SELECT * FROM $wpdb->posts 
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID) 
WHERE userPosts.value = 0 
AND userPosts.value IS NULL 
ORDER BY $wpdb->posts.post_date DESC 

並且這確實讓我的帖子值= 0以及NULL,但它重複所有我的NULL張貼三次!

SELECT * FROM $wpdb->posts 
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID) 
WHERE userPosts.value = 0 
OR userPosts.value IS NULL 
ORDER BY $wpdb->posts.post_date DESC 

那麼我做錯了什麼?

回答

15

嘗試使用parenthasis上OR條件(userContests.value = 0 OR userContests.value IS NULL)

SELECT * FROM $wpdb->posts 
    LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID) 
    WHERE (userContests.value = 0 
    OR userContests.value IS NULL) 
    ORDER BY $wpdb->posts.post_date DESC 
+0

這並獲得成功,謝謝您! – Sweepster 2012-01-08 18:40:43

1

(x = 0) AND (x is NULL) - 單個字段不能同時爲兩個值。毫不奇怪,你根本得不到任何結果,因爲你已經指定了一個不可能滿足的條件。

至於查詢的其餘部分。您使用$wdpd->posts作爲源表,但在where子句中使用名爲userContests的表。 $ wpdb-> posts是否解析爲userContests?如果是這樣,爲什麼要在一個地方使表名稱動態並將其硬編碼在另一個地方?

1

你部分的標題回答了自己的問題:或不和,但嘗試使用DISTINCT

SELECT DISTINCT * FROM $wpdb->posts -- Note "DISTINCT" 
LEFT JOIN userPosts ON ($wpdb->posts.ID = userPosts.postID) 
WHERE userContests.value = 0 
OR userContests.value IS NULL -- Note "OR" 
ORDER BY $wpdb->posts.post_date DESC