Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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 (php) [Seleccionar]

while($fila3[]=mysqli_fetch_array($result3))
{}
while($fila4[]=mysqli_fetch_array($result4))
{}
while($fila5[]=mysqli_fetch_array($result5))
{}

while($fila2=mysqli_fetch_array($result2))
{
echo "<tr>";
echo "<td class='estilo_td1'>".$fila2['cod_cliente']."</td><td class='estilo_td'>".$fila2['fecha']."</td><td class='estilo_td'>".$fila2['contacto']."</td>";
echo "<td class='estilo_td'>".$fila2['tipo']."</td><td class='estilo_td'>".$fila2['poblacion']."</td><td class='estilo_td'>".$fila2['provincia']."</td>";
echo "<td class='estilo_td'>".$fila2['pais']."</td><td class='estilo_td'>".$fila2['revisado']."</td><td class='estilo_td'>".$fila2['nombre_empresa']."</td>";
echo "<td class='estilo_td'>".$fila2['web']."</td>";
echo "</tr>";

foreach($fila3 as $value){
echo "<tr>";
echo "<td class='estilo_td'>".$value['clientes_telefonos']."</td>";
}

foreach($fila4 as $value4){
echo "<td class='estilo_td'>".$value4['nombre']."</td><td class='estilo_td'>".$value4['apellidos']."</td>";
}

foreach($fila5 as $value5){
echo "<td class='estilo_td'>".$value5['clientes_emails']."</td>";
echo "</tr>";
}

}


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 (php) [Seleccionar]
<tr><td>datos del cliente1<td><td>.....wfe</td>...............</tr>
<tr><td>telefono1</td><td>nombre1</td><td>apellido1</td><td>email1</td></tr>
<tr><td>telefono2</td><td>nombre2</td><td>apellido2</td><td>email2</td></tr>
<tr><td>telefono3</td><td>nombre3</td><td>apellido3</td><td>email3</td></tr>
.........
<tr><td>datos del cliente2<td><td>.....wfe</td>...............</tr>
......
.....
......
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 (php) [Seleccionar]

$result2=mysqli_query($conexion,"insert into clientes (fecha,contacto,tipo,poblacion,provincia,pais,revisado,nombre_empresa,web) values
('$anadir_fecha','$anadir_contacto','$anadir_tipo','$anadir_poblacion','$anadir_provincia','$anadir_pais','$anadir_revisado',
'$anadir_nombre_empresa','$anadir_web')");

mysqli_set_charset($result2,"utf8");

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

$result3=mysqli_query($conexion,"insert into clientes_telefonos (clientes_telefonos,cod_tel) values ('$p_scnt','$id')");
mysqli_set_charset($result3,"utf8");

$id_telefonos=mysqli_insert_id($conexion);

/* INSERTAR clientes_tratamiento $p_scnt_nombre y $p_scnt_apellidos */
$result4=mysqli_query($conexion,"insert into clientes_tratamiento (nombre,apellidos,cod_tra,cod_tra_tel) values ('$p_scnt_nombre','$p_scnt_apellidos','$id',
'$id_telefonos')");
mysqli_set_charset($result4,"utf8");

foreach($pscnt as $numero){
       mysqli_query($conexion,"insert into clientes_telefonos (clientes_telefonos,cod_tel) values ('$numero','$id')");
}
     
      $id_telefonos_bucle=mysqli_insert_id($conexion);
     
      foreach($pscnt_nombre as $index => $nombre){
    $apellidos = $pscnt_apellidos[$index];
    mysqli_query($conexion,"insert into clientes_tratamiento (nombre, apellidos,cod_tra,cod_tra_tel) values ('$nombre','$apellidos','$id',
    '$id_telefonos_bucle')");
}
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 (php) [Seleccionar]

$result2=mysqli_query($conexion,"select cod_cliente,fecha,contacto,tipo,poblacion,provincia,pais,revisado,nombre_empresa,web,clientes_telefonos,nombre,apellidos
from clientes,clientes_telefonos,clientes_tratamiento,clientes_emails where cod_cliente='$cod_cliente' or fecha='$fecha' or contacto='$contacto' or tipo='$tipo'
or poblacion='$poblacion' or provincia='$provincia' or pais='$pais' or revisado='$revisado' or nombre_empresa='$nombre_empresa' or web='$web' or
clientes_telefonos='$telefonos' or nombre='$nombre' or apellidos='$apellidos' or clientes_emails='$clientes_emails' group by cod_cliente");
mysqli_set_charset($result2,"utf8");

/*$result3=mysqli_query($conexion,"select clientes_telefonos from clientes_telefonos where clientes_telefonos='$telefonos' group by cod_telefonos");
mysqli_set_charset($result3,"utf8");

$result4=mysqli_query($conexion,"select nombre,apellidos from clientes_tratamiento where nombre='$nombre' or apellidos='$apellidos' group by cod_tratamiento");
mysqli_set_charset($result4,"utf8");*/

$result5=mysqli_query($conexion,"select clientes_emails from clientes,clientes_telefonos,clientes_tratamiento,clientes_emails where
cod_cliente='$cod_cliente' or fecha='$fecha' or contacto='$contacto' or tipo='$tipo' or
poblacion='$poblacion' or provincia='$provincia' or pais='$pais' or revisado='$revisado' or nombre_empresa='$nombre_empresa' or web='$web' or
clientes_telefonos='$telefonos' or nombre='$nombre' or apellidos='$apellidos' or clientes_emails='$clientes_emails' group by cod_emails");
mysqli_set_charset($result5,"utf8");


while($fila2=mysqli_fetch_array($result2))
{
echo "<tr>";
echo "<td class='estilo_td1'>".$fila2['cod_cliente']."</td><td class='estilo_td'>".$fila2['fecha']."</td><td class='estilo_td'>".$fila2['contacto']."</td>";
echo "<td class='estilo_td'>".$fila2['tipo']."</td><td class='estilo_td'>".$fila2['poblacion']."</td><td class='estilo_td'>".$fila2['provincia']."</td>";
echo "<td class='estilo_td'>".$fila2['pais']."</td><td class='estilo_td'>".$fila2['revisado']."</td><td class='estilo_td'>".$fila2['nombre_empresa']."</td>";
echo "<td class='estilo_td'>".$fila2['web']."</td>";
echo "</tr>";

$result3=mysqli_query($conexion,"select clientes_telefonos from clientes_telefonos where cod_tel=".$fila2['cod_cliente']);
mysqli_set_charset($result3,"utf8");

$result4=mysqli_query($conexion,"select clientes_telefonos,nombre,apellidos from clientes_telefonos,clientes_tratamiento where
clientes_tratamiento.cod_tra=".$fila2['cod_cliente']." and clientes_telefonos.cod_tel=".$fila2['cod_cliente']);
mysqli_set_charset($result4,"utf8");

/*while($fila3=mysqli_fetch_array($result3))
{
*/

while($fila4=mysqli_fetch_array($result4))
{
echo "<tr>";

echo "<td class='estilo_td1'>".$fila4['clientes_telefonos']."</td>";

echo "<td class='estilo_td'>".$fila4['nombre']."</td><td class='estilo_td'>".$fila4['apellidos']."</td>";

echo "</tr>";

}

/*}*/


}


pero no seria mejor utilizar esto para hacer el select:

Código (sql) [Seleccionar]

select * from clientes_telefonos,clientes_tratamiento where cod_tel=5 and
clientes_telefonos.cod_telefonos=clientes_tratamiento.cod_tra_tel group by cod_telefonos;


como lo veis vosotros el insert y el select?