Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: tecasoft en 20 Octubre 2015, 00:08 am



Título: problema al hacer select de varias tablas sql
Publicado por: tecasoft en 20 Octubre 2015, 00:08 am
buenas gente, tengo un problema al seleccionar 3 arrays y que me la muestre ordenadas, son 4 tablas diferentes, existen en este orden, clientes,clientes_telefonos,clientes_tratamiento y clientes_emails( en la tabla clientes hay datos sobre clientes, en la tabla clientes_telefonos pueden existir varios telefonos asociados a 1 cliente, en clientes_tratamiento pueden haber varias personas asociadas a mismo telefono y en la tabla emails pueden haber varios emails para varios clientes, entonces esto es lo que me resulta:

Código
  1. while($fila3[]=mysqli_fetch_array($result3))
  2. {}
  3. while($fila4[]=mysqli_fetch_array($result4))
  4. {}
  5. while($fila5[]=mysqli_fetch_array($result5))
  6. {}
  7.  
  8. while($fila2=mysqli_fetch_array($result2))
  9. {
  10. echo "<tr>";
  11. echo "<td class='estilo_td1'>".$fila2['cod_cliente']."</td><td class='estilo_td'>".$fila2['fecha']."</td><td class='estilo_td'>".$fila2['contacto']."</td>";
  12. echo "<td class='estilo_td'>".$fila2['tipo']."</td><td class='estilo_td'>".$fila2['poblacion']."</td><td class='estilo_td'>".$fila2['provincia']."</td>";
  13. echo "<td class='estilo_td'>".$fila2['pais']."</td><td class='estilo_td'>".$fila2['revisado']."</td><td class='estilo_td'>".$fila2['nombre_empresa']."</td>";
  14. echo "<td class='estilo_td'>".$fila2['web']."</td>";
  15. echo "</tr>";
  16.  
  17. foreach($fila3 as $value){
  18. echo "<tr>";
  19. echo "<td class='estilo_td'>".$value['clientes_telefonos']."</td>";
  20. }
  21.  
  22. foreach($fila4 as $value4){
  23. echo "<td class='estilo_td'>".$value4['nombre']."</td><td class='estilo_td'>".$value4['apellidos']."</td>";
  24. }
  25.  
  26. foreach($fila5 as $value5){
  27. echo "<td class='estilo_td'>".$value5['clientes_emails']."</td>";
  28. echo "</tr>";
  29. }
  30.  
  31. }
  32.  

me sale bien la tabla clientes, me sale bien la tabla telefonos, pero la tabla tratamiento y emails no se ajustan con el select.

como lo hariais para que se muestre <tr><td>telefono1</td><td>nombre1</td><td>apellido1</td><td>email1</td></tr>   1 por linea <tr> ++

Mod: Temas sobre PHP van al subforo de PHP.


Título: Re: problema al hacer select de varias tablas sql
Publicado por: engel lex en 20 Octubre 2015, 00:14 am
agarraste los resultados de todos los clientes y los estás retornando juntos... tienes que hacer el query por cliente o arreglar el array por cliente...



Título: Re: problema al hacer select de varias tablas sql
Publicado por: tecasoft en 20 Octubre 2015, 00:20 am
no te entiendo a que se refiere a modificar la sql?
esto es a lo me refiero
Código
  1. <tr><td>datos del cliente1<td><td>.....wfe</td>...............</tr>
  2. <tr><td>telefono1</td><td>nombre1</td><td>apellido1</td><td>email1</td></tr>
  3. <tr><td>telefono2</td><td>nombre2</td><td>apellido2</td><td>email2</td></tr>
  4. <tr><td>telefono3</td><td>nombre3</td><td>apellido3</td><td>email3</td></tr>
  5. .........
  6. <tr><td>datos del cliente2<td><td>.....wfe</td>...............</tr>
  7. ......
  8. .....
  9. ......
  10.  


Título: Re: problema al hacer select de varias tablas sql
Publicado por: engel lex en 20 Octubre 2015, 00:25 am
tienes que hacer un query por cliente... para sacar sus datos que sean repetidos...


Título: Re: problema al hacer select de varias tablas sql
Publicado por: tecasoft en 20 Octubre 2015, 00:29 am
como seria por cliente? es decir hacer sola una sql para todo? y como seria? llevo horas y horas y no entiendo el funcionamiento algo se me escapa  :huh:


Título: Re: problema al hacer select de varias tablas sql
Publicado por: tecasoft en 20 Octubre 2015, 05:53 am
tengo esto para insertar un usuario he cojido el ultimo insert into

 $id=mysqli_insert_id($conexion); /* Te muestra el ultimo id_campo insertado en la tabla */

pero nose como cojer en el de $id_telefonos_bucle=mysqli_insert_id($conexion); ya que me muestra el ultimo del foreach anterior, como lo podria hacer, nose si sigo buenas metodologias:

Código
  1. $result2=mysqli_query($conexion,"insert into clientes (fecha,contacto,tipo,poblacion,provincia,pais,revisado,nombre_empresa,web) values
  2. ('$anadir_fecha','$anadir_contacto','$anadir_tipo','$anadir_poblacion','$anadir_provincia','$anadir_pais','$anadir_revisado',
  3. '$anadir_nombre_empresa','$anadir_web')");
  4.  
  5. mysqli_set_charset($result2,"utf8");
  6.  
  7. /* INSERTAR clientes_telefonos  $p_scnt */
  8. $id=mysqli_insert_id($conexion); /* Te muestra el ultimo id_campo insertado en la tabla */
  9.  
  10. $result3=mysqli_query($conexion,"insert into clientes_telefonos (clientes_telefonos,cod_tel) values ('$p_scnt','$id')");
  11. mysqli_set_charset($result3,"utf8");
  12.  
  13. $id_telefonos=mysqli_insert_id($conexion);
  14.  
  15. /* INSERTAR clientes_tratamiento $p_scnt_nombre y $p_scnt_apellidos */
  16. $result4=mysqli_query($conexion,"insert into clientes_tratamiento (nombre,apellidos,cod_tra,cod_tra_tel) values ('$p_scnt_nombre','$p_scnt_apellidos','$id',
  17. '$id_telefonos')");
  18. mysqli_set_charset($result4,"utf8");
  19.  
  20. foreach($pscnt as $numero){
  21.       mysqli_query($conexion,"insert into clientes_telefonos (clientes_telefonos,cod_tel) values ('$numero','$id')");
  22. }
  23.  
  24.      $id_telefonos_bucle=mysqli_insert_id($conexion);
  25.  
  26.      foreach($pscnt_nombre as $index => $nombre){
  27.     $apellidos = $pscnt_apellidos[$index];
  28.     mysqli_query($conexion,"insert into clientes_tratamiento (nombre, apellidos,cod_tra,cod_tra_tel) values ('$nombre','$apellidos','$id',
  29.     '$id_telefonos_bucle')");
  30. }
  31.  


Título: Re: problema al hacer select de varias tablas sql
Publicado por: eLank0 en 20 Octubre 2015, 08:55 am
Sería bueno ver el código del SELECT. Para coger datos de todas esas tablas relacionadas ya usas un JOIN? En lugar de usar 4 o 5 consultas separadas?

Salu2


Título: Re: problema al hacer select de varias tablas sql
Publicado por: tecasoft en 20 Octubre 2015, 12:59 pm
esto es lo que utilizo para hacer un select:
Código
  1. $result2=mysqli_query($conexion,"select cod_cliente,fecha,contacto,tipo,poblacion,provincia,pais,revisado,nombre_empresa,web,clientes_telefonos,nombre,apellidos
  2. from clientes,clientes_telefonos,clientes_tratamiento,clientes_emails where cod_cliente='$cod_cliente' or fecha='$fecha' or contacto='$contacto' or tipo='$tipo'
  3. or poblacion='$poblacion' or provincia='$provincia' or pais='$pais' or revisado='$revisado' or nombre_empresa='$nombre_empresa' or web='$web' or
  4. clientes_telefonos='$telefonos' or nombre='$nombre' or apellidos='$apellidos' or clientes_emails='$clientes_emails' group by cod_cliente");
  5. mysqli_set_charset($result2,"utf8");
  6.  
  7. /*$result3=mysqli_query($conexion,"select clientes_telefonos from clientes_telefonos where clientes_telefonos='$telefonos' group by cod_telefonos");
  8. mysqli_set_charset($result3,"utf8");
  9.  
  10. $result4=mysqli_query($conexion,"select nombre,apellidos from clientes_tratamiento where nombre='$nombre' or apellidos='$apellidos' group by cod_tratamiento");
  11. mysqli_set_charset($result4,"utf8");*/
  12.  
  13. $result5=mysqli_query($conexion,"select clientes_emails from clientes,clientes_telefonos,clientes_tratamiento,clientes_emails where
  14. cod_cliente='$cod_cliente' or fecha='$fecha' or contacto='$contacto' or tipo='$tipo' or
  15. poblacion='$poblacion' or provincia='$provincia' or pais='$pais' or revisado='$revisado' or nombre_empresa='$nombre_empresa' or web='$web' or
  16. clientes_telefonos='$telefonos' or nombre='$nombre' or apellidos='$apellidos' or clientes_emails='$clientes_emails' group by cod_emails");
  17. mysqli_set_charset($result5,"utf8");
  18.  
  19.  
  20. while($fila2=mysqli_fetch_array($result2))
  21. {
  22. echo "<tr>";
  23. echo "<td class='estilo_td1'>".$fila2['cod_cliente']."</td><td class='estilo_td'>".$fila2['fecha']."</td><td class='estilo_td'>".$fila2['contacto']."</td>";
  24. echo "<td class='estilo_td'>".$fila2['tipo']."</td><td class='estilo_td'>".$fila2['poblacion']."</td><td class='estilo_td'>".$fila2['provincia']."</td>";
  25. echo "<td class='estilo_td'>".$fila2['pais']."</td><td class='estilo_td'>".$fila2['revisado']."</td><td class='estilo_td'>".$fila2['nombre_empresa']."</td>";
  26. echo "<td class='estilo_td'>".$fila2['web']."</td>";
  27. echo "</tr>";
  28.  
  29. $result3=mysqli_query($conexion,"select clientes_telefonos from clientes_telefonos where cod_tel=".$fila2['cod_cliente']);
  30. mysqli_set_charset($result3,"utf8");
  31.  
  32. $result4=mysqli_query($conexion,"select clientes_telefonos,nombre,apellidos from clientes_telefonos,clientes_tratamiento where
  33. clientes_tratamiento.cod_tra=".$fila2['cod_cliente']." and clientes_telefonos.cod_tel=".$fila2['cod_cliente']);
  34. mysqli_set_charset($result4,"utf8");
  35.  
  36. /*while($fila3=mysqli_fetch_array($result3))
  37. {
  38. */
  39.  
  40. while($fila4=mysqli_fetch_array($result4))
  41. {
  42. echo "<tr>";
  43.  
  44. echo "<td class='estilo_td1'>".$fila4['clientes_telefonos']."</td>";
  45.  
  46. echo "<td class='estilo_td'>".$fila4['nombre']."</td><td class='estilo_td'>".$fila4['apellidos']."</td>";
  47.  
  48. echo "</tr>";
  49.  
  50. }
  51.  
  52. /*}*/
  53.  
  54.  
  55. }
  56.  

pero no seria mejor utilizar esto para hacer el select:

Código
  1. SELECT * FROM clientes_telefonos,clientes_tratamiento WHERE cod_tel=5 AND
  2. clientes_telefonos.cod_telefonos=clientes_tratamiento.cod_tra_tel GROUP BY cod_telefonos;
  3.  

como lo veis vosotros el insert y el select?