Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Unir varios On dentro del mismo LEFT JOIN

Estas en el tema de Unir varios On dentro del mismo LEFT JOIN en el foro de PHP en Foros del Web. Hola necesito comprobar que los valores en datosmultas.placa y datosmultas.cedula esten dentro de registro.consulta he inmentado agregar multiples maneras y no lo consigo.... Código PHP: ...
  #1 (permalink)  
Antiguo 23/07/2015, 03:14
 
Fecha de Ingreso: noviembre-2004
Mensajes: 249
Antigüedad: 19 años, 4 meses
Puntos: 1
Unir varios On dentro del mismo LEFT JOIN

Hola necesito comprobar que los valores en datosmultas.placa y datosmultas.cedula esten dentro de registro.consulta

he inmentado agregar multiples maneras y no lo consigo....

Código PHP:
$listado=  mysql_query("SELECT registro.id, registro.fecha, registro.ip, registro.hora, registro.consulta, datosmultas.cedula, datosmultas.placa FROM registro LEFT JOIN datosmultas ON registro.consulta=datosmultas.placa GROUP BY id"$cn); 
he hecho esto (obvio error sintactico o no se) agregando un AND este es el script que uso:

Código PHP:
$listado=  mysql_query("SELECT registro.id, registro.fecha, registro.ip, registro.hora, registro.consulta, datosmultas.cedula, datosmultas.placa FROM registro LEFT JOIN datosmultas ON registro.consulta=datosmultas.placa AND datosmultas.cedula GROUP BY id"$cn); 
y como ese muchas mas otras formas... ¿CUAL ES LA MEJOR MANERA? que funcione para agregar varias comprobaciones después del ON

alguien me pueda ayudar por favor.. gracias....
  #2 (permalink)  
Antiguo 23/07/2015, 09:38
Avatar de RollerSky  
Fecha de Ingreso: marzo-2008
Mensajes: 123
Antigüedad: 16 años
Puntos: 8
Respuesta: Unir varios On dentro del mismo LEFT JOIN

Hola,

bueno tomando en cuenta el segundo código es una de las formas correctas para hacer un Join, solo que al final, después del AND no estas llevando la estructura correcta, te pongo un ejemplo que debería funcionar con múltiples condiciones.
Código PHP:
$listado=  mysql_query("SELECT registro.id, registro.fecha, registro.ip, registro.hora, registro.consulta, datosmultas.cedula, datosmultas.placa FROM registro LEFT JOIN datosmultas ON registro.consulta=datosmultas.placa AND datosmultas.cedula='XXXX' AND  registro.fecha = 'XXXXXX'  GROUP BY id"$cn); 
,

Saludos.
__________________
www.sawedsa.com
  #3 (permalink)  
Antiguo 23/07/2015, 10:24
 
Fecha de Ingreso: noviembre-2004
Mensajes: 249
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: Unir varios On dentro del mismo LEFT JOIN

Hola amigo Gracias por responder, pues te cuento que soy alli un poco novaton en esto de la programación y todo lo que he hecho es gracias a ustedes por eso mil y mil gracias..

segundo: en mi caso en mi ejemplo no se por que no me funciona en lo que deseo hacer, pues si aparece la consulta pero al agregar el AND de unas se daña o no funciona lo que me estaba funcionando.

(tengo dos tablas registro y datosmultas y en cada una de ellas los campos que se ven)

este es el código que me funciona:

Código PHP:
$listado=  mysql_query("SELECT registro.id, registro.fecha, registro.ip, registro.hora, registro.consulta, datosmultas.cedula, datosmultas.placa FROM registro LEFT JOIN datosmultas ON registro.consulta=datosmultas.placa GROUP BY id"$cn); 
lo que hace es comprobando que en el campo registro de la tabla consulta estén los valores de los campos cedula y placa de la tabla datosmultas


lo que ahora necesito es comprobar la cedula (datosmultas.cedula) pues en el ejemplo solo me comprueba es la placa lo que sigue después del ON (datosmultas.placa)


si hago el cambio a datosmultas.placa por datosmultas.cedula me muestra al contrario osea esta funcionando como es solo que no se como meter las dos comprobaciones

por favor ayudemeee
  #4 (permalink)  
Antiguo 23/07/2015, 10:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Unir varios On dentro del mismo LEFT JOIN

Código SQL:
Ver original
  1. SELECT
  2.     R.id,
  3.     R.fecha,
  4.     R.ip,
  5.     R.hora,
  6.     R.consulta,
  7.     IFNULL(DM.cedula, '') cedula,
  8.     R.placa
  9. FROM registro R LEFT JOIN datosmultas DM ON R.consulta=DM.placa  AND Rcedula = DM.cedula
  10. WHERE 1 OR DM.placa IS NULL
  11. GROUP BY id
Entendamos quie esto te sacará todos los registros, tenga o no multas, pero devovlerá NULL en aquellos registros que no tengan coincidencia para ambas condiciones del ON.
¿Eso se entiende?

¿Tienes perfectamente claro la diferencia entre INNER JOIN, LEFT JOIN y RIGHT JOIN?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/07/2015, 10:46
Avatar de RollerSky  
Fecha de Ingreso: marzo-2008
Mensajes: 123
Antigüedad: 16 años
Puntos: 8
Respuesta: Unir varios On dentro del mismo LEFT JOIN

Hola,

Si lo que quieres es validar, que registro.consulta tenga Placas(datosmultas.placa) O cédulas(datosmultas.cedula), sólo debes poner la condición OR dentro del JOIN, así:

Código PHP:
$listado=  mysql_query("SELECT registro.id, registro.fecha, registro.ip, registro.hora, registro.consulta, datosmultas.cedula, datosmultas.placa FROM registro LEFT JOIN datosmultas ON registro.consulta=datosmultas.placa OR registro.consulta=datosmultas.cedula GROUP BY id"$cn); 
Para una ayuda mejor tal vez puedes poner las tablas, y que valores contendrán cada tabla, porque si lo que quieres es: que registro.consulta tenga Placas(datosmultas.placa) Y además en el campo registro.consulta tenga cédulas(datosmultas.cedula), nunca te va mostrar datos porque las dos condiciones no se cumplen en el mismo campo, a menos que datosmultas.cedula y datosmultas.placa tengan el mismo valor, en este caso si esto es lo que quieres pues el Modelo de la DB no esta correctamente.

Saludos.
__________________
www.sawedsa.com
  #6 (permalink)  
Antiguo 23/07/2015, 11:46
 
Fecha de Ingreso: noviembre-2004
Mensajes: 249
Antigüedad: 19 años, 4 meses
Puntos: 1
Respuesta: Unir varios On dentro del mismo LEFT JOIN



muchisisimas gracias solo era colocar el OR jejejej que tonto fui jejejej muchas gracias amigotes... gracias a ustedes he aprendido algo nuevo hoy...

  #7 (permalink)  
Antiguo 23/07/2015, 12:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Unir varios On dentro del mismo LEFT JOIN

Atención:
A nivel de estructuración de datos, poner una relación de dependencia opcional como la que se describes puede generar enormes inconsistencias.
Tarde o temprano te puedes encontrar con datos basura, u obligado a crear procesos para mantener la integridad de los datos.
Como diseño de datos y dependencias está muy mal
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fecha, join, left, mysql, registro, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:52.