2012-01-08 11 views
7

userPosts.value puede contener uno de dos valores: 0 ó 1.MySQL pantalla filas donde el valor es nulo o igual a X

me quedo Junto a userPosts a mi mesa Mensajes.

Quiero obtener todas las publicaciones de mi tabla de publicaciones donde userPosts.value = 0, así como todas las publicaciones que no tienen ningún userPosts.value en absoluto (por lo tanto, NULL).

Lo siguiente sólo me mensajes donde el valor = 0, pero no 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 

Lo siguiente sólo me pone los mensajes donde el valor = 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 

pero esto no da resultado en absoluto :

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 

y esto me da mensajes con value = 0 y NULL, pero repite todos mis NULL ¡publica tres veces!

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 

¿Qué estoy haciendo mal?

Respuesta

15

Intente utilizar parenthasis en OR condición (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

Esto hizo el truco, gracias ¡tú! – Sweepster

1

(x = 0) AND (x is NULL) - un solo campo no puede tener dos valores al mismo tiempo. No sorprende que no obtenga ningún resultado, porque ha especificado una condición where que es imposible de satisfacer.

En cuanto al resto de la consulta. Utiliza $wdpd->posts como su tabla fuente, pero luego usa una tabla llamada userContests en la cláusula where. ¿$ Wpdb-> posts se resuelven en userContests? Si es así, ¿por qué hacer que el nombre de la tabla sea dinámico en un lugar y lo codifique en otro?

1

Ha respondido parcialmente a su propia pregunta en el título: o no y, pero trate de usar 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 
Cuestiones relacionadas