Pregunta

Básicamente tengo una consulta mysql similar a la siguiente:

mysql_query("SELECT n.title, v.value FROM posts n INNER JOIN votes v ON n.id = v.id");

Y lo que tengo que hacer es tomar el título de la tabla de publicaciones y el valor de voto actual de la tabla de votos.

Por el momento, los votos no se almacenan en la tabla de votos a menos que ocurra un voto. Por lo tanto, todas las publicaciones con 0 votos no están en la tabla de votos.

Esto causa un error de que está tratando de obtener el título Y el valor de voto donde la identificación del mensaje = la identificación del valor de voto. Si no hay ningún registro en la tabla de votos, entonces el valor debería regresar como NULL o 0, pero en este momento toda la consulta regresa como nula, por lo que ni siquiera puedo devolver el título.

¿Cómo puedo solucionar todo esto en una consulta? No quiero tener que usar múltiples consultas ... Gracias :)

¿Fue útil?

Solución

Use una combinación izquierda en lugar de una interna

Una unión interna requiere filas coincidentes de la tabla en ambos lados de la unión.

Una combinación izquierda (o combinación externa izquierda para usar su nombre completo) selecciona todas las filas de la tabla izquierda y luego las filas coincidentes de la derecha, devolviendo valores nulos si no hay filas coincidentes en la tabla derecha, como usted están pidiendo.

(También hay uniones externas correctas, pero se puede lograr el mismo efecto cambiando las condiciones en la cláusula ON)

Otros consejos

SELECT n.title, v.value FROM posts n LEFT JOIN votes v ON n.id = v.id

SELECCIONAR n.title, v.value DESDE publicaciones como n, votos como v WHERE n.id = v.id

Prueba eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top