Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Consulta a dos tablas

Estas en el tema de Consulta a dos tablas en el foro de Bases de Datos General en Foros del Web. Tengo la siguiente estructura: Tabla1(Mes, Campo1) Con los datos: 01 100 02 200 Tabla2(Mes,Campo2) Con los datos: 01 1000 03 300 Lo que pretendo es ...
  #1 (permalink)  
Antiguo 05/08/2004, 01:26
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
Pregunta Consulta a dos tablas

Tengo la siguiente estructura:

Tabla1(Mes, Campo1)
Con los datos:
01 100
02 200

Tabla2(Mes,Campo2)
Con los datos:
01 1000
03 300

Lo que pretendo es hacer una consulta que me saque lo siguiente:

Código:
Mes Campo1 Campo2
01   100    1000
02   200      
03           300
¿Cómo hacerlo?

Gracias.
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen

Última edición por peloteitor; 05/08/2004 a las 01:35
  #2 (permalink)  
Antiguo 05/08/2004, 01:33
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años
Puntos: 2
"select tabla1.Campo1,tabla2.Campo2,tabla2.Mes from tabla1,tabla2 where tabla1.Mes=tabla2.Mes"
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #3 (permalink)  
Antiguo 05/08/2004, 01:37
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
eso no funciona
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen
  #4 (permalink)  
Antiguo 05/08/2004, 01:42
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Cierto, eso jamás funcionará...
  #5 (permalink)  
Antiguo 05/08/2004, 01:47
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
tengo un problema similar... intenté eso y más y nada me funciona. Pongo los códigos a ver si nos ayudan a ambos

Los menu desplegables:

Código PHP:
<?
//Conexion con la base
$link mysql_connect("localhost""aviacion_admin""123456"); 
mysql_select_db("aviacion_itinerarios"$link);

echo 
'<FORM METHOD="POST" ACTION="prueba2.php"><br>';

//Creamos la sentencia SQL y la ejecutamos
$sql="Select Distinct desde From origen Order by desde";
$result=mysql_db_query("aviacion_itinerarios",$sql);

echo 
"CIUDAD DE ORIGEN <select name='$desde'>";

//Mostramos los registros en forma de menú desplegable
while ($row=mysql_fetch_array($result))
{echo 
'<option>'.$row["desde"];}
mysql_free_result($result)
?>
</select>
<br><br><br>


<?
//Conexion con la base
$link mysql_connect("localhost""aviacion_admin""123456"); 
mysql_select_db("aviacion_itinerarios"$link);

//Creamos la sentencia SQL y la ejecutamos
$sql="Select Distinct hacia From destino Order by hacia";
$result=mysql_db_query("aviacion_itinerarios",$sql);

echo 
"CIUDAD DE DESTINO <select name='$hacia'>";

//Mostramos los registros en forma de menú desplegable
while ($row=mysql_fetch_array($result))
{echo 
'<option>'.$row["hacia"];}
mysql_free_result($result)
?>
</select>
<br><br><br>
<INPUT TYPE="SUBMIT" value="Mostrar">
</FORM>
Hasta aquí todo resulta bien...

La página de respuesta con el código:

Código PHP:
<?
include("config.php");


if (isset(
$_GET['hacia'])){   
$sql="SELECT * FROM destino INNER JOIN origen ON (origen.hacia=destino.hacia) WHERE destino.hacia='".$_GET['hacia']."' ORDER BY salida"
$result=mysql_query($sql);
}

    echo 
"<table border=1>";
    echo 
"<tr valign=middle><td align=center>LINEA AEREA</td>";
    echo 
"<td align=center>VUELO</td>";
    echo 
"<td align=center>SALIDA</td>";
    echo 
"<td align=center>LLEGADA</td>";
    echo 
"<td align=center>FRECUENCIA</td>";
    echo 
"<td align=center>AVION</td>";
    echo 
"<td align=center>ESCALA</td></tr><br>";
    echo 
"</table>";
 
 while(
$row=mysql_fetch_array($result)){
 
    echo 
"<table border=1>";
    echo 
"<tr valign=middle><td align=center>".$row['linea']."</td>";
    echo 
"<td align=center>".$row['vuelo']."</td>";
    echo 
"<td align=center>".$row['salida']."</td>";
    echo 
"<td align=center>".$row['llegada']."</td>";
    echo 
"<td align=center>".$row['frecuencia']."</td>";
    echo 
"<td align=center>".$row['avion']."</td>";
    echo 
"<td align=center>".$row['escala']."</td></tr>";
}
    echo 
"</table>";
?>
tabla origen: id, desde, hacia, salida
tabla destino: id, hacia, llegada, avion, vuelo, frecuencia, escala, linea

Siempre arroja este error:

LINEA AEREA VUELO SALIDA LLEGADA FRECUENCIA AVION ESCALA


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/aviacion/public_html/prueba2.php on line 20
  #6 (permalink)  
Antiguo 05/08/2004, 01:49
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
ahhhh, la famosa linea 20 es:
Código PHP:
<?
while($row=mysql_fetch_array($result)){
?>
  #7 (permalink)  
Antiguo 05/08/2004, 02:14
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años
Puntos: 2
Podría asegurar que tu mensaje original no era así. Los datos que has puesto ahora no son lo que estaban antes. Con lo que hay puesto ahora claro que no va a funcionar.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #8 (permalink)  
Antiguo 05/08/2004, 02:23
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
El mensaje no ha cambiado en cuanto a contenido. Lo he modificado pq el editor de mensajes se come los espacios seguidos (es decir, que si escribes 10 espacios seguidos solo te sale 1) y no quedaba claro.
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen
  #9 (permalink)  
Antiguo 05/08/2004, 02:23
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Bueno, debido a mis escasos conocimientos en el área y que llevo ya casi tres días tratando de resolver no solo este sino un par de codigos más, te aseguro que he cambiado cada uno de ellos unas 1000 veces aproximadamente, buscando la manera correcta de terminarlos...
  #10 (permalink)  
Antiguo 05/08/2004, 02:24
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Upppsss... creí que era conmigo. Me salgo de la conversa, disculpen!!!
  #11 (permalink)  
Antiguo 05/08/2004, 02:28
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años
Puntos: 2
No sé, tal vez me lió eso . Si nadie da solución a esto (que seguro que la tiene) siempre puedes hacerlo con programación. No sería muy complicado hacerlo, lo malo es que tendrías que hacer dos consultas.
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #12 (permalink)  
Antiguo 05/08/2004, 02:31
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
Por cierto, la BD está en access.
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen
  #13 (permalink)  
Antiguo 05/08/2004, 02:45
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Creo que esto os puede ayudar, no lo he probado pero creo debería daros el resultado esperado
Código:
select tabla1.mes mes, tabla1.campo, tabla2.campo 
from tabla1 left join tabla2 
where tabla1.Mes=tabla2.Mes
union distinct
select tabla2.mes mes, tabla1.campo, tabla2.campo
from tabla2 left join tabla1 
where tabla1.Mes=tabla2.Mes
order by mes
Una breve explicación: la primara parte obtiene todo lo de la tabla1 y lo común de la tabla2, la segunda parte obtiene todo lo de la tabla2 y lo común de la tabla1.
Si estas dos consultas las hacemos por separado obtendríamos datos repetidos (los comunes en ambas tablas), es por ello que tenemos que hacer el union para que nos elimine los datos repetidos.
Esta es la teoría, ahora hay que probarla pues la he puesto sobre la marcha.
Un saludo.
  #14 (permalink)  
Antiguo 05/08/2004, 03:14
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
Bueno, eso no lo he probado pq ya he encontrado una solucion. Está probada y funciona:
Código:
select mes, campo1 as c1, 0 as c2
from tabla1
union
select mes, 0 as c1, campo2 as c2
from tabla2
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen

Última edición por peloteitor; 05/08/2004 a las 03:30
  #15 (permalink)  
Antiguo 05/08/2004, 03:15
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
Gracias a todos/as de todas formas.
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen
  #16 (permalink)  
Antiguo 05/08/2004, 04:26
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Peloteitor, la solución que tu pones no da exactamente lo que pides al principio, pues cuando el mes está en las dos tablas te da dos filas en lugar de poner los dos datos del mes en una fila.
Como te lo puse yo si debería hacerlo (como puedes ver es ir un poco más allá con respecto a tu solución), pero si te vale como lo has hecho, pues fantástico.
Un saludo.
  #17 (permalink)  
Antiguo 06/08/2004, 00:40
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
No entiendo como te funciona:

la consulta que tú haces

Código:
select mes, campo1 as c1, 0 as c2
from tabla1
union
select mes, 0 as c1, campo2 as c2
from tabla2 
debería de darte los siguientes resultados:

Código:
Mes   c1     c2
01   100    
02   200
01            1000     
03            300
Para que te de los siguientes resultados:

Código:
Mes Campo1 Campo2
01   100    1000
02   200      
03           300

la consulta debería debería de ser la siguiente:

Código:
SELECT Tabla1.Mes, Tabla1.Campo1, Tabla2.Campo2 FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.Mes=Tabla2.Mes 

Última edición por Atzeneta; 06/08/2004 a las 00:43
  #18 (permalink)  
Antiguo 06/08/2004, 01:35
Avatar de peloteitor  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 849
Antigüedad: 20 años, 5 meses
Puntos: 1
Bueno, es cierto. Lo que pasa es que yo después hacía esto:
select tab3.mes, sum(tab3.c1),sum(tab3.c2)
from
(select mes,campo1 c1, 0 c2 from tab1
union
select mes, 0 c1, campo2 c2 from tab2) tab3
group by mes;

Que era lo que verdaderemente queria. Y con eso ya sale una fila por mes.
__________________
El sexo sin amor es una experiencia vacía. Pero como experiencia vacía es una de las mejores.

Woody Allen
  #19 (permalink)  
Antiguo 06/08/2004, 03:48
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Sí, es cierto, a no ser que tengas valores duplicados de mes dentro de una tabla, el resultado tendría que ser el mismo.
  #20 (permalink)  
Antiguo 09/08/2004, 01:24
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
La opción está bien, y debería funcionarte, pero si empiezas a manejar muchos datos se hará lenta, prueba a hacer algo así

SELECT Tabla1.Mes, Tabla1.Campo1, Tabla2.Campo2 FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.Mes=Tabla2.Mes
UNION
SELECT Tabla2.Mes, Tabla1.Campo1, Tabla2.Campo2 FROM Tabla2 LEFT JOIN Tabla1 ON Tabla2.Mes=Tabla1.Mes WHERE (Tabla1.Mes)Is Null

La primera parte, te devuelve todos los de la tabla1, estén o no en la tabla2, y la segunda parte, solo aquellos que están en la tabla 2, y no tienen mes en la tabla1, si el campo mes, es un índice, tabla1 y tabla2, la consulta será más rápida

Un saludo
  #21 (permalink)  
Antiguo 13/08/2004, 09:33
 
Fecha de Ingreso: junio-2003
Ubicación: Ciudad de Panamá
Mensajes: 74
Antigüedad: 20 años, 11 meses
Puntos: 0
Creo que debes verificar si el $_GET['hacia'] esta pasando adecuadamente, pues algunas veces ocurre que este no trae los datos y el "isset" no es del todo confiable.

Aunque no se si sea el más adecuado, Yo uso "empty" en vez de isset.

empty($_GET['hacia'])

Suerte
  #22 (permalink)  
Antiguo 13/08/2004, 17:03
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 23 años, 6 meses
Puntos: 3
Sin leer demasiado de lo que está arriba...(sólo el primer mensaje) respondo:

prueba con :

select tabla1.*, tabla2.*
from tabla1, tabla2
where tabla1.Mes = tabla2.Mes

Ahora si eso lo metes en el php.... ahí tienes que ver bien como le mandas las variables, las comillas y todo eso
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
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 04:02.