problema al hacer select de varias tablas sql

Iniciado por tecasoft, 20 Octubre 2015, 00:08 AM

0 Miembros y 1 Visitante están viendo este tema.

tecasoft

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.
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

engel lex

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...

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

tecasoft

#2
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>
......
.....
......
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

engel lex

tienes que hacer un query por cliente... para sacar sus datos que sean repetidos...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

tecasoft

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:
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

tecasoft

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')");
}
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits

eLank0

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

tecasoft

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?
http://www.tecasoft.com Un ninja del hacking etico, programacion en html5, css3, javascript, jquery, php, python, c/c++, ensamblador, ingenieria reversa,a auditorias de seguridad, pentesting, exploits