[Php-avanzado] consulta tesis..

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Sab Jul 31 21:33:15 ART 2010


Hola Bruno,

El sáb, 31-07-2010 a las 00:10 +0000, Bruno Meschini escribió:
> bien ahi va 

	trabajemos sobre la query. Una vez que funcione, el código PHP para
recorrer la respuesta y mostrarla es siempre el mismo:

> $sql= "SELECT R.*, D.*, P.id_paciente, P.nombre, P.apellido,
> count(A.id_rehabilitacion)AS presentes
>             FROM (rehabilitaciones AS R, dias_rehabilitaciones AS D,
> pacientes AS P, asistencias AS A)
>             WHERE R.id_rehabilitacion = D.id_rehabilitacion
>              AND R.id_paciente = P.id_paciente
>              AND R.id_rehabilitacion= A.id_rehabilitacion
>              AND D.id_dia=3
>               GROUP BY R.id_rehabilitacion";

	Tu problema acá es que cuando ponés varias tablas en el FROM, estás
definiendo la intersección de los conjuntos de datos, y por tanto si un
conjunto está vacío, el resultado será un conjunto vacío siempre.
	(el conjunto vacío es el elemento nulo de las operaciones entre
conjuntos, como el 0 lo es de la multiplicación de números)

	Lo que tenés que hacer es definir a la tabla asistencias como un
"vínculo a la izquierda" o left join, para que si la intersección es
nula, el registro aparezca igual.

	Quedaría así:

SELECT R.*, D.*, P.id_paciente, P.nombre, P.apellido,
count(A.id_rehabilitacion)AS presentes
FROM (rehabilitaciones AS R, dias_rehabilitaciones AS D, pacientes AS P)
LEFT JOIN asistencias AS A ON R.id_rehabilitacion= A.id_rehabilitacion
WHERE R.id_rehabilitacion = D.id_rehabilitacion
AND R.id_paciente = P.id_paciente
AND D.id_dia=3
GROUP BY R.id_rehabilitacion

	Fijate que el cambio es poner a la tabla que puede estar vacía para la
relación en el LEFT JOIN, y ahí mismo se define sobre qué campos es la
relación, en lugar de en el WHERE.

	Probala si anda por ejemplo en phpmyadmin, ya que si la query es
válida, la parte del script sigue igual que siempre.

	Saludos!

-- 

Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado