2012-01-08 10 views
7

userPosts.value può contenere uno dei due valori: 0 o 1.MySQL visualizzazione righe in cui il valore è nullo o uguale a X

Sono Sinistra Unire userPosts al mio tavolo Messaggi.

Voglio ottenere tutti i post dalla mia tabella Post in cui userPosts.value = 0 così come tutti i post che non hanno alcun valore userPosts.value (quindi, NULL).

Il seguente solo a me ottenere i messaggi in cui il valore = 0, ma non 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 

Il seguente ottiene solo a me i messaggi dove il valore = 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 

ma questo non produce risultati a tutti :

e questo mi ottiene post con valore = 0 e NULL ma ripete tutto il mio NULL posta tre volte!

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 

Quindi cosa sto sbagliando?

risposta

15

Tenta di utilizzare parenthasis su OR condizione (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

Questo ha fatto il trucco, grazie tu! – Sweepster

1

(x = 0) AND (x is NULL) - un singolo campo non può essere due valori allo stesso tempo. Nessuna sorpresa che tu non abbia alcun risultato, perché hai specificato una condizione in cui è impossibile soddisfare.

Come per il resto della query. Si utilizza $wdpd->posts come tabella di origine, ma in seguito si utilizza una tabella denominata userContests nella clausola where. $ Wpdb-> post si risolvono in userContests? In tal caso, perché rendere dinamico il nome della tabella in un punto e codificarlo in un altro?

1

È parzialmente risposto alla tua domanda nel titolo: o meno e, ma provare a utilizzare 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 
Problemi correlati