2012-01-08 25 views
7

userPosts.value có thể chứa một trong hai giá trị: 0 hoặc 1.MySQL hiển thị hàng nơi giá trị IS NULL hoặc bằng X

Mình Tôi Sống Sót Tham gia userPosts để bàn bài viết của tôi.

Tôi muốn nhận tất cả các bài đăng từ bảng Bài đăng của tôi nơi userPosts.value = 0 cũng như tất cả các bài đăng không có bất kỳ userPosts.value nào cả (do đó, NULL).

Sau đây chỉ làm cho tôi bài viết mà value = 0 nhưng không có 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 

Sau đây chỉ được tôi viết trong đó value = 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 

nhưng điều này mang lại không có kết quả gì cả :

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 

và điều này giúp tôi đăng bài có giá trị = 0 cũng như NULL nhưng nó lặp lại tất cả NULL của tôi bài viết ba lần!

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 

Vì vậy, tôi đang làm gì sai?

Trả lời

15

Cố gắng sử dụng parenthasis trên OR trạng (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

này đã làm các trick, cảm ơn bạn! – Sweepster

1

(x = 0) AND (x is NULL) - một trường đơn không thể là hai giá trị cùng một lúc. Không có gì ngạc nhiên khi bạn không nhận được kết quả nào cả, bởi vì bạn đã chỉ định một điều kiện không thể thỏa mãn.

Đối với phần còn lại của truy vấn. Bạn sử dụng $wdpd->posts làm bảng nguồn của mình, nhưng sau đó sử dụng bảng có tên là userContests trong mệnh đề where. Các bài viết $ wpdb-> có giải quyết thành userContests không? Nếu vậy, tại sao làm cho tên bảng năng động ở một nơi và mã hóa cứng ở một nơi khác?

1

Bạn phần nào trả lời câu hỏi của riêng bạn trong tiêu đề: HOẶC không AND, nhưng hãy thử sử dụng 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 
Các vấn đề liên quan