Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con consulta a dos tablas

Estas en el tema de Problema con consulta a dos tablas en el foro de PHP en Foros del Web. Vereis, tengo una tabla de personas (id_persona, nombre, apellido1 y apellido2) y otra tabla de relaciones con una id_pareja, un miembro1 y un miembro2. ¿Como ...
  #1 (permalink)  
Antiguo 14/02/2013, 06:40
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 16 años, 10 meses
Puntos: 3
Problema con consulta a dos tablas

Vereis, tengo una tabla de personas (id_persona, nombre, apellido1 y apellido2) y otra tabla de relaciones con una id_pareja, un miembro1 y un miembro2. ¿Como hago una consulta si lo que necesito es mostrar una lista de parejas en formato:

Pareja 1 Pedro Perez Mateos y María Ramirez Marcos

Estoy trabajando con php y phpmyadmin. No acabo de ver como enfocarlo.
  #2 (permalink)  
Antiguo 14/02/2013, 08:35
 
Fecha de Ingreso: febrero-2011
Mensajes: 108
Antigüedad: 13 años, 1 mes
Puntos: 4
Respuesta: Problema con consulta a dos tablas

Suponiendo que la tabla pareja sea asi

Pareja
id
id_persona1
id_persona2

Y que la tabla persona sea asi

Persona
id
nombre
a_materno
a_paterno

Y que en tu programa agreges primero las personas y luego las parejas de acuerdo a las personas que agregaste la consulta seria a la tabla pareja, y para obtener la descripcion de cada persona se realiza una segunda consulta a la tabla persona mas o menos asi

Código:
$consulta1 = mysql_query("select id, id_persona1, id_persona2 from pareja");
while($row=mysql_fetch_array($consulta1)){
$consulta2 =mysql_query("select id, nombre, a_paterno, a_materno from persona where id = '".$row[id_persona1]."'");
$row2=mysql_fetch_array($consulta2);
$consulta3 =mysql_query("select id, nombre, a_paterno, a_materno from persona where id = '".$row[id_persona2]."'");
$row3=mysql_fetch_array($consulta3);

echo "Pareja ".$row[id]." ".$row2[nombre]." ".$row2[a_paterno]." ".$row2[a_materno]." y ".$row3[nombre]." ".$row3[a_paterno]." ".$row3[a_materno];
}
Obviamente todo esto es siempre y cuando hayas llamado anteriormente a tu base de datos pero ese es otro cuento. Creo que esto va en la seccion PHP. Ademas ten cuidado al normalizar tu base de datos yo personalmente haria solo una tabla y le agregaria el campo pareja y ahi insertaria el id de la persona asociada.

Última edición por sefirotxx; 14/02/2013 a las 09:08
  #3 (permalink)  
Antiguo 14/02/2013, 09:32
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Problema con consulta a dos tablas

Muchas gracias. La solución que me das es una que habia intentado evitar porque no me gustaba la idea de usar varias consultas. En su lugar he desarrollado un código tal que así:

Código PHP:
<?php
$mysqli
=conecta();
$result $mysqli->query("select * from parejas, personas where personas.id_persona = parejas.persona1 or personas.id_persona=parejas.persona2 and parejas.tipo='matrimonio'");
$idanterior=0;
$pareja="";
while (
$row $result->fetch_assoc()){
    
$id_pareja=$row["id_pareja"];
        if(
$id_pareja==$idanterior){
            
$pareja=$pareja.' y <a href="?seccion=ficha&idficha='.$row["id_persona"].'">'.$row["nombre"].' '.$row["apellido1"].' '.$row["apellido2"].'</a>';
            echo 
'<tr><td>'.$pareja.'</td></tr>';
        }else{
            
$pareja='<a href="?seccion=ficha&idficha='.$row["id_persona"].'">'.$row["nombre"].' '.$row["apellido1"].' '.$row["apellido2"].'</a>';
        }
        
$idanterior=$id_pareja;
    }
mysqli_free_result($result);
?>
Este código genera las lineas dentro de una tabla.

En cuanto a lo de usar una sola tabla no me vale porque aunque en principio la tabla solo tenía los campos mencionados le voy a agregar otros campos donde se establece el tipo de pareja (por ejemplo matrimonio), la fecha, etc que hacen de cada relación un elemento único con sus propias caracteristicas.

Gracias de todas formas.

P.D: Puse la consulta en el hilo de mysql porque pensé que quizás podia sacar todos los campos con una sola consulta y esa era mi duda aunque al final haya acabado resolviendolo con php. Agradecería que algun moderador moviera el post a la seccion de PHP que alli será de mas utilidad
  #4 (permalink)  
Antiguo 14/02/2013, 13:21
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 2 meses
Puntos: 447
Respuesta: Problema con consulta a dos tablas

Hola harvey:

Por que no intentas hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM personas;
  2. +------------+--------+-----------+-----------+
  3. | id_persona | nombre | apellido1 | apellido2 |
  4. +------------+--------+-----------+-----------+
  5. |          1 | Pedro  | Perez     | Mateos    |
  6. |          2 | Maria  | Ramirez   | Marcos    |
  7. |          3 | Fulano | de        | Tal       |
  8. |          4 | Sutano | por       | Cual      |
  9. +------------+--------+-----------+-----------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM relaciones;
  13. +-----------+----------+----------+
  14. | id_pareja | miembro1 | miembro2 |
  15. +-----------+----------+----------+
  16. |         1 |        1 |        2 |
  17. |         2 |        3 |        4 |
  18. +-----------+----------+----------+
  19. 2 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT
  22.     ->   id_pareja,
  23.     ->   CONCAT(P1.nombre, ' ', P1.apellido1, ' ', P1.apellido2) miembro1,
  24.     ->   CONCAT(P2.nombre, ' ', P2.apellido1, ' ', P2.apellido2) miembro2
  25.     -> FROM relaciones R
  26.     -> INNER JOIN personas P1 ON P1.id_persona = R.miembro1
  27.     -> INNER JOIN personas P2 ON P2.id_persona = R.miembro2;
  28. +-----------+--------------------+----------------------+
  29. | id_pareja | miembro1           | miembro2             |
  30. +-----------+--------------------+----------------------+
  31. |         1 | Pedro Perez Mateos | Maria Ramirez Marcos |
  32. |         2 | Fulano de Tal      | Sutano por Cual      |
  33. +-----------+--------------------+----------------------+
  34. 2 rows in set (0.00 sec)

El código es exclusivamente MySQL, porque no tengo conocimientos con PHP, pero creo que te puede servir.

Saludos
Leo.
  #5 (permalink)  
Antiguo 15/02/2013, 07:06
 
Fecha de Ingreso: mayo-2007
Mensajes: 256
Antigüedad: 16 años, 10 meses
Puntos: 3
Respuesta: Problema con consulta a dos tablas

Gracias Leonardo_josue. A eso es a lo que me referia cuando pedi ayuda en la sección de mysql porque intuía que debía haber alguna forma de hacerlo y de mysql mis conocimientos son los básicos.
Intentaré realizar la consulta que me indicas. Gracias de nuevo.

Edito: Ha funcionado perfectamente. Voy a estudiar la sintaxis para otra vez que me encuentre con un problema parecido. Muchas gracias.

Última edición por harvey; 15/02/2013 a las 07:28 Razón: Código comprobado

Etiquetas: mysql, tabla, tablas
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 23:20.