Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Corrección para recorrido del for en php

Estas en el tema de Corrección para recorrido del for en php en el foro de PHP en Foros del Web. Hola, Estoy haciendo un for en una base de datos relacional específico en dos tablas: medico y domicilio, lo que necesito es que al recorrer ...
  #1 (permalink)  
Antiguo 27/09/2018, 11:37
 
Fecha de Ingreso: noviembre-2015
Mensajes: 52
Antigüedad: 3 años, 1 mes
Puntos: 2
Corrección para recorrido del for en php

Hola,

Estoy haciendo un for en una base de datos relacional específico en dos tablas: medico y domicilio, lo que necesito es que al recorrer la consulta me envíe los registros que cuentan con el mismo domicilio.tipo_via, es decir quedaría así el resultado de la consulta gráficamente:
---------------------------------------
id_domicilio | tipo_via | id_medico |
---------------------------------------
.......1.........|avenida...|......1........|
......495......|calle........|......1........|

Ahora bien, al ejecutar mi código, me hace un recorrido que trae dos veces lo mismo, es decir; del tipo_via, lo trae dos veces en el resultado, así:
----------
tipo_via |
----------
avenida.|
avenida.|
----------
Al ejecutarlo con un echo"".$i;, me dice que está obteniendo 2 filas pero no son más que la misma.
Este es mi código de la consulta:
Código PHP:
$inp_med="SELECT d.id_domicilio, d.tipo_via, m.id_medico, d.id_medico FROM domicilio d, medico m WHERE d.id_medico = m.id_medico and d.id_medico = '$id_medico'"

    
$result mysqli_query($con,$inp_med)or die (mysqli_error()); 
    
$row mysqli_fetch_array($result); 
    
$num_resul=mysqli_num_rows($result); 



    
#foreach ($num_resul as $dmed[$i]) {
    #while($i <= $num_resul){

    
for ($i=1$i <= ($num_resul); ++$i){  
        echo 
"malditooincr".$i;
        
$inp_med1="SELECT d.id_domicilio, d.tipo_via, m.id_medico, d.id_medico, m.especialidad FROM domicilio d, medico m WHERE d.id_medico = m.id_medico and d.id_medico = '$id_medico'";

        
$result1 mysqli_query($con,$inp_med1);
        
$row1 mysqli_fetch_row($result1);

        
$dmed[$i] = $row1['1']; 
        echo 
"<br>";
        echo 
"fila dentro while: ".$dmed[$i];
        echo 
"otromalditooincr".$i.$dmed[$i];
        
    } 
Aclaro y muy importante, no tiene inputs en la interfaz gráfica ya que solo necesito que estas posiciones las obtenga de la consulta a la base de datos.
El código anterior funciona de la siguiente forma, primero hago una consulta para guardarla en variables de mysqli_query y mysqli_fetch_row, luego hago una segunda consulta dentro del for para oque haga el recorrido con la variable $i, es en este punto en donde está fallando ya que solo trae la primera fila dos veces.
Me pueden ayudar a corregirlo??
Espero haberme explicado bien.
Saludos.
__________________
paco alonso
  #2 (permalink)  
Antiguo 27/09/2018, 12:31
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.184
Antigüedad: 10 años, 9 meses
Puntos: 1015
Respuesta: Corrección para recorrido del for en php

En la segunda consulta agrega GROUP BY d.tipo_via

o bien agrega tipo via al inicio del select -> SELECT DISCTINCT d.tipo_via ....
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #3 (permalink)  
Antiguo 27/09/2018, 12:55
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.416
Antigüedad: 3 años, 5 meses
Puntos: 256
Respuesta: Corrección para recorrido del for en php

Pudiste continuar tu anterior pregunta donde habías dicho haberlo solucionado, ahora bien, porque no haces un inner join de las tablas a través del campo id__medico? creo que sería más simple todo, eso si solo quieres saber las direcciones asociadas a un médico especifico:

Código PHP:
Ver original
  1. $sql = "SELECT direccion.*, medicos.* FROM direcciones INNER JOIN medicos ON direcciones.id_medico = medicos.id_medico WHERE medicos.id_medico = '$valor'";

lo digo porque no veo la necesidad de hacer la segunda consulta a tu base de datos si lo que quieres es traerte los domicilios asociados a un id del medico
__________________
[email protected]
HITCEL
  #4 (permalink)  
Antiguo 27/09/2018, 14:10
 
Fecha de Ingreso: noviembre-2015
Mensajes: 52
Antigüedad: 3 años, 1 mes
Puntos: 2
Respuesta: Corrección para recorrido del for en php

Cita:
Iniciado por xfxstudios Ver Mensaje
Pudiste continuar tu anterior pregunta donde habías dicho haberlo solucionado, ahora bien, porque no haces un inner join de las tablas a través del campo id__medico? creo que sería más simple todo, eso si solo quieres saber las direcciones asociadas a un médico especifico:

Código PHP:
Ver original
  1. $sql = "SELECT direccion.*, medicos.* FROM direcciones INNER JOIN medicos ON direcciones.id_medico = medicos.id_medico WHERE medicos.id_medico = '$valor'";

lo digo porque no veo la necesidad de hacer la segunda consulta a tu base de datos si lo que quieres es traerte los domicilios asociados a un id del medico
Gracias por tu respuesta, de hecho sí ya está solucionado y como bien mencionas esta pregunta que abrí, salió sobrando porque después de tanto meterme en el código me pareció que cometí un error en la codificación, pero me equivoqué. El código ya está correcto y funciona a la perfección. Se los comparto por si a alguien más le sirve esta solución.
Código PHP:
$inp_med="SELECT d.id_domicilio, d.tipo_via, m.id_medico, d.id_medico FROM domicilio d, medico m WHERE d.id_medico = m.id_medico and d.id_medico = '$id_medico'"

    
$result mysqli_query($con,$inp_med)or die (mysqli_error()); 
    
$row mysqli_fetch_array($result); 
    
$num_resul=mysqli_num_rows($result); 

    while(
$i <= $num_resul){
  
        
$inp_med1="SELECT d.id_domicilio, d.tipo_via, m.id_medico, d.id_medico, m.especialidad FROM domicilio d, medico m WHERE d.id_medico = m.id_medico and d.id_medico = '$id_medico' and d.id_domicilio = ".$i." ";

        
$result1 mysqli_query($con,$inp_med1);
        
$row1 mysqli_fetch_row($result1);

        
$dmed[$i] = $row1['1']; 
        ++
$i;
    } 
Gracias por su apoyo y sus respuestas.
Saludos.
__________________
paco alonso



La zona horaria es GMT -6. Ahora son las 22:38.