Foros del Web » Programando para Internet » PHP »

Ayuda con consultas multitabla.

Estas en el tema de Ayuda con consultas multitabla. en el foro de PHP en Foros del Web. Hola, Una vez más, en pos del aprobado, me surgió una nueva duda con mi proyecto. Necesito hacer una consulta multitabla, lo malo es que ...
  #1 (permalink)  
Antiguo 10/06/2010, 07:40
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Ayuda con consultas multitabla.

Hola,

Una vez más, en pos del aprobado, me surgió una nueva duda con mi proyecto. Necesito hacer una consulta multitabla, lo malo es que ya ni me acuerdo de como era.

Lo que trato de hacer es lo siguiente:

Código HTML:
<?php
//include con las funciones
include ("mysql.inc.php");
// Conectamos con el servidor Mysql
conectar($conexion);
// Seleccionamos la base de datos
// con la que queremos trabajar
mysql_select_db("a6715552_garban", $conexion);

//extrae los datos del usuario
$consulta='SELECT datos_usuario.nombre, datos_usuario.app1, datos_usuario.app2, datos_usuario.dni, datos_usuario.movil, registro_sucesos.coord1, registro_sucesos.coord2, registro_sucesos2.coord1, registro_sucesos2.coord2
FROM datos_usuario
INNER JOIN registro_sucesos ON datos_usuario.movil=registro_sucesos.movil
JOIN registro_sucesos2 ON datos_usuario.movil=registro_sucesos2.movil';

//se ejecutan las consultas de las extracciones de datos
$resultado=mysql_query($consulta,$conexion); 

// Este bucle while mostrara todos los datos de los usuarios, uno detras de otro

while ($registro1 = mysql_fetch_array($resultado))
{
	echo "<center><table border='0'>";
	echo "<h1><u><center>";
	echo "<tr><td>","<b><font face='arial'>Nombre:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.nombre'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>Primer Apellido:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.app1'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>Segundo Apellido:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.app2'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>DNI:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.dni'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>Móvil:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.movil'],"</td></tr>";
	echo "<tr><td colspan='2'>","<b><font face='arial'><center>Mapas:</b></td></tr>";
	echo "<tr><td>","<center><b><font face='arial'>Inició la ruta en:<br><img src='$mapainicio'></td>";
	echo "<td>","<center><b><font face='arial'>Último envío de datos:<br><img src='$maparuta'></td></tr>";
	echo "<tr><td><br><img src='$mapainiciot'></td>";
	echo "<td><br><img src='$maparutat'></td></tr>";
	echo "<tr><td colspan='2'>","<center><hr></td></tr>";
	echo "</table>";
} 




//mete en variables las coordenadas del mapa de inicio
while ($datos = mysql_fetch_array($resultado)) 
{ 
	echo $datos['registro_sucesos.coord1']; 
	echo $datos['registro_sucesos.coord2'];
	echo $datos['registro_sucesos2.coord1']; 
	echo $datos['registro_sucesos2.coord2'];
}

//mapas satelite
$mapainicio="http://maps.google.com/staticmap?markers=$while1,$while2&size=312x312&maptype=hybrid&key=ABQIAAAACL7lTKexgA68InhNAOB_GRRtO13F_ulhCFu0-_djha7gKogNnxRWCIfIc4pSFwy2qH99Jsd1CR4TVg&sensor=false";	
$maparuta="http://maps.google.com/staticmap?markers=$while1,$while2,blues|$while3,$while4,midyellow&path=rgb:0x0000ff,weight:5|$while1,$while2|$while3,$while4&size=312x312&maptype=hybrid&key=ABQIAAAACL7lTKexgA68InhNAOB_GRRtO13F_ulhCFu0-_djha7gKogNnxRWCIfIc4pSFwy2qH99Jsd1CR4TVg&sensor=false";
//mapas terrain
$mapainiciot="http://maps.google.com/staticmap?markers=$while1,$while2&size=312x312&maptype=terrain&key=ABQIAAAACL7lTKexgA68InhNAOB_GRRtO13F_ulhCFu0-_djha7gKogNnxRWCIfIc4pSFwy2qH99Jsd1CR4TVg&sensor=false";	
$maparutat="http://maps.google.com/staticmap?markers=$while1,$while2,blues|$while3,$while4,midyellow&path=rgb:0x0000ff,weight:5|$while1,$while2|$while3,$while4&size=312x312&maptype=terrain&key=ABQIAAAACL7lTKexgA68InhNAOB_GRRtO13F_ulhCFu0-_djha7gKogNnxRWCIfIc4pSFwy2qH99Jsd1CR4TVg&sensor=false";






// Desconectamos del servidor          
desconectar($conexion);


?> 
Pero no me devuelve nada. Después, comentando el primer while, el 2º (el while grande) me devuelve el código HTML que lleva dentro, pero no me extrae nada de la base de datos (por ejemplo con ",$registro1['datos_usuario.nombre'],"). Incluso si hay 2 registros en la base de datos, el bucle se repite, pero no me extrae nada.

¿Alguien puede ayudarme?

Saludos :).
  #2 (permalink)  
Antiguo 10/06/2010, 08:42
 
Fecha de Ingreso: febrero-2010
Ubicación: Asturias patria querida
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: Ayuda con consultas multitabla.

Te pongo como yo estructuraría la consulta, creo que te funcione así pero comprenderás que sin probarlo es impsoible decirlo seguro, con este tipo de consultas complejas sabes que hay que probar.

Código PHP:
$consulta='SELECT DISTINCT
                      datos_usuario.nombre, 
                      datos_usuario.app1, 
                      datos_usuario.app2, 
                      datos_usuario.dni, 
                      datos_usuario.movil as datos_usuario_movil, 
                      registro_sucesos.coord1, 
                      registro_sucesos.coord2,
                      registro_sucesos.movil as registro_sucesos_movil,
                      registro_sucesos2.coord1,
                      registro_sucesos2.coord2,
                      reregistro_sucesos2.movil as registro_sucesos2_movil
                FROM 
                     datos_usuario,
                     registro_sucesos,
                     registro_sucesos2
               WHERE
                    datos_usuario_movil = registro_sucesos_movil and
                    datos_usuario_movil = registro_sucesos2_movil'

bss.
  #3 (permalink)  
Antiguo 10/06/2010, 11:17
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Ayuda con consultas multitabla.

Cita:
Iniciado por Tifany Ver Mensaje
Te pongo como yo estructuraría la consulta, creo que te funcione así pero comprenderás que sin probarlo es impsoible decirlo seguro, con este tipo de consultas complejas sabes que hay que probar.

Código PHP:
$consulta='SELECT DISTINCT
                      datos_usuario.nombre, 
                      datos_usuario.app1, 
                      datos_usuario.app2, 
                      datos_usuario.dni, 
                      datos_usuario.movil as datos_usuario_movil, 
                      registro_sucesos.coord1, 
                      registro_sucesos.coord2,
                      registro_sucesos.movil as registro_sucesos_movil,
                      registro_sucesos2.coord1,
                      registro_sucesos2.coord2,
                      reregistro_sucesos2.movil as registro_sucesos2_movil
                FROM 
                     datos_usuario,
                     registro_sucesos,
                     registro_sucesos2
               WHERE
                    datos_usuario_movil = registro_sucesos_movil and
                    datos_usuario_movil = registro_sucesos2_movil'

bss.
Muchas gracias, voy a probar a ver que tal me va. Luego posteo como me fue.

Saludos.
  #4 (permalink)  
Antiguo 10/06/2010, 11:29
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Ayuda con consultas multitabla.

Argh!

Ahora me da un error, lo que no sé de donde puede venir. Me dice que es al principio del while:

El error es:

Código:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\garbancito\prueba_consultas.php on line 36
Y el while:

Código HTML:
while ($registro1 = mysql_fetch_array($resultado))
{
	echo "<center><table border='0'>";
	echo "<h1><u><center>";
	echo "<tr><td>","<b><font face='arial'>Nombre:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.nombre'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>Primer Apellido:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.app1'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>Segundo Apellido:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.app2'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>DNI:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.dni'],"</td></tr>";
	echo "<tr><td>","<b><font face='arial'>Móvil:</b></td><td align='right'><font face='arial'>",$registro1['datos_usuario.movil'],"</td></tr>";
	echo "<tr><td colspan='2'>","<b><font face='arial'><center>Mapas:</b></td></tr>";
	echo "<tr><td>","<center><b><font face='arial'>Inició la ruta en:<br><img src='$mapainicio'></td>";
	echo "<td>","<center><b><font face='arial'>Último envío de datos:<br><img src='$maparuta'></td></tr>";
	echo "<tr><td><br><img src='$mapainiciot'></td>";
	echo "<td><br><img src='$maparutat'></td></tr>";
	echo "<tr><td colspan='2'>","<center><hr></td></tr>";
	echo "</table>";
}
¿Alguien ve algo?

Saludos.
  #5 (permalink)  
Antiguo 10/06/2010, 11:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: Ayuda con consultas multitabla.

No puedes usar alias de columnas en la cláusula WHERE.

Con la consulta que tenías inicialmente, ¿devolvía registros? ¿haz probando con imprimir el contenido de $registro1 (con print_r(), por ejemplo)?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 10/06/2010, 11:43
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Ayuda con consultas multitabla.

Cita:
Iniciado por David Ver Mensaje
No puedes usar alias de columnas en la cláusula WHERE.

Con la consulta que tenías inicialmente, ¿devolvía registros? ¿haz probando con imprimir el contenido de $registro1 (con print_r(), por ejemplo)?
Cierto, acabo de probar la consulta en la opción "SQL" del MySQL del XAMPP y me dice que es errónea.

Entonces David, ¿podrías explicarme como probar eso? Te digo de antemano que la consulta que yo escribí no me devolvía ningún registro, por eso es por lo que tengo la duda /:.

Saludos.

--------

Edito:

Lo que hice fué

Código HTML:
while ($registro1 = mysql_fetch_array($resultado))
{
	echo $registro1;
}
Y lo que me devolvió fue:

Código:
ArrayArray
Supongo que devolvió 2 veces Array porque en la tabla tengo 2 usuarios, los cuales explicarían los 2 arrays.

Saludos.
  #7 (permalink)  
Antiguo 10/06/2010, 11:54
 
Fecha de Ingreso: junio-2010
Mensajes: 25
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Ayuda con consultas multitabla.

Vuelvo a responder.

Voy avanzando en el tema. Descubrí que, en vez de colocar por ejemplo ",$registro1['datos_usuario.nombre'],", colocando ",$registro1[1]," sí devuelve los resultados. A mi parecer, habría que modificar el mysql_fetch_array, pero no estoy seguro.

Sigo esperando ayuda.

Saludos.

(PD: Voy a probar poniendo los números, pero sería de mucha más utilidad que alguien me dijera como ponerlo con nombres).
  #8 (permalink)  
Antiguo 10/06/2010, 11:57
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: Ayuda con consultas multitabla.

En el índice no debes colocar el nombre de la tabla. Usa $registro1['nombre']

Con print_r puedes ver el contenido del array (índices y valores)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Etiquetas: multitabla
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 05:45.