Problemilla gordo

fiveson5
11 de Mayo del 2004
A ver, ante todo hola, soy un usuario torpon e inexperto que intenta hacer sus pinillos peacheperos. He aqui mi cuestion.

Resulta que estoy haciendo una aplicacion, bases de datos incluidas, y me surgue un pequeño problema.
Tengo una tabla "eventos" que registra cada evento que tiene cada usuario en una fecha determinada.

El problema surge cuando quiero hacer una busqueda de los usuarios libres en una fecha determinada. Hago una orden sql que me busque los usuarios con eventos distintos al de esa fecha, pero claro, el mismo usuario que tenga esa fecha ocupada puede tener otros eventos con lo cual tambien sale en el resultado de esa orden sql. Entonces me decidí a hacer otra consulta q preguntase exactamente lo contrario, que usuarios tenian esa fecha ocupada, y entonces comparar; si el mismo usuario salia en el resultado de las dos ordenes, no lo queria listar. Esto lo he echo (ya me estoy alargando) asi:

$result = mysql_query("SELECT ID_profesores from eventos where hora_inicio<>'17:00';", $conexion);

$result2= mysql_query("SELECT ID_profesores from eventos where hora_inicio='17:00';", $conexion);// and fijo='1' and ID_dia='3'
$total=mysql_fetch_array($result);
$total2=mysql_fetch_array($result2);
//mysql_num_rows($result);
while ($i<mysql_num_rows($result))
{
$ID= mysql_result($result, $i);
while ($j<mysql_num_rows($result2))
{
$ID2= mysql_result($result2, $j);
// echo $ID2. " es lo que vale ID2 <br>";
$cosa1=$ID;
$cosa2=$ID2;
// echo "ID vale= " .$ID. "<br>";
if ($cosa1==$cosa2)//$total2['ID_profesores']==$total['ID_profesores'])
{
echo "el ID repetio es " .$cosa1. "<BR>";//$total2['ID_profesores']. "<br>";
}
$j++;
}



Total, un puñetero lio. Alguien sugiere una manera mejor, ya sea mediante PHP o algun condicionante en la orden sql para que me pueda quitar este quebradero de cabeza??. Gracias de antemano.


El codigo esta desarrollado por alguien con poca idea de php, no tengais en cuenta las posibles chorradas que podais ver...

spankcl
11 de Mayo del 2004
No entiendo bien tu consulta, podrías detallar un poco más qué campos tienes en la BD y que buscas exactamente.

Porque si bien entiendo si un profesor no tiene evento para el día 3 a las 17:00 no va a aparecer nunca su ID en tu consulta.

Por lo poco que entiendo deberías hacer algo menos así:

---------------------------------------------------------
// 1. Consultar en la tabla eventos el ID de aquellos profesores que efectivamenrte
// tengan ocupado el día X a la hora Y

$result = mysql_query("SELECT ID_profesores from eventos where hora_inicio= '17:00' and dia ='3' ....etc;", $conexion);
while ($row = db_fetch_row($result)) {

// 2. Consultar en la tabla PROFESORES (o en la tabla donde almacenes el ID y la info de los profesores)
// el ID de aquellos profesores que difiere de los ID obtenidos en la primera consulta (es decir el ID de los profesores
// efectivamente disponibles
$result1 = mysql_query("SELECT ID_profesores from PROFESORES where ID_profesores <> '$row[0]';", $conexion);
while ($row1 = db_fetch_row($result1)){
$prof_libres= $prof_libres + 1;
$prof = $prof."- $row1[0] <br/>n";
}
}

// Si hay profesores libres mostrar cuántos hay y cuál es su ID (o cualquier otro dato que quieras recoger de la BD)
if ($prof_libres) {echo "Hay $prof_libres para la fecha cosultada. Los códigos son:<br/>$prof";}
else {echo "No hay profesores libres para la fecha consultada";}

---------------------------------------------------------

Si no es exactamente lo que buscas postea otro anuncio explicando mejor que tablas tienes, con que info y que quieres hacer con tu consulta.

Suerte

fiveson5
11 de Mayo del 2004
hola, soy yo de nuevo. Gracias por tu respuesta. Mañana en el curro te digo los campos de la base de datos y mas exactamente todas las cosas, y de paso probare con lo que me dices. Muchas gracias. Mañana te cuento!.

fiveson5
11 de Mayo del 2004
He estado analizando bien tu respuesta y creo que es justo lo que busco. Primero queria mirar los profesores que coincidian con esa fecha, y luego elegir todos los otros para que me los mostrase.

Lo que te dije antes. Mañana pruebo y te comento mis resultados. Muchas gracias por tu tiempo.

fiveson5
11 de Mayo del 2004
hola de nuevo. Al final la cosa la he resuelto de otra manera. No se pq, tu codigo me daba un fallo cuando hacia lo de las row, asi que buscando buscando he encontrado esto:


$result = mysql_query("SELECT * FROM profesores LEFT JOIN eventos ON profesores.ID = eventos.ID_profesores WHERE evento.hora_inicio='17:00' AND evento.ID_dia<>'3';)", $conexion);
Con esta orden se seleccionan todos aquellos que no tengan la hora a las 17 y el dia 3 ocupado. se ve que en mysql los subselects no van muy para allá...