Comunidad de diseño web y desarrollo en internet online

Seleccion de registro de 3 tablas sin repetirlos

Citar            
MensajeEscrito el 17 Feb 2012 09:11 pm
Muy buenas a todos

bueno tengo una duda desde hace algun tiempo:
Tengo una base en la cual necesito sacar registros de 3 tablas
1 tabla: medicos (id_med, nombre, apellidos, etc)
2 relacion medicos_especialidades (id_relacion, id_medico, nombre_especialidad)
3 relacion medicos_ciudades(id_relacion, id_medico, nombre_ciudad)

1. Cuando selecciono los datos del medico 1(ejemplo: nombre, apellidos), obviamente me selecciona todo bien.
2. Cuando selecciono el medico y las ciudades en las cuales atiende, comienza a repetir el registro nombre y apellido de la tabla medico
ejemplo: el medico 1 atiende en ciudad_1 y ciudad_1, entonces el nombre y apellido se van repitiendo

3. cuando ademas de pedir esos datos, pido los nombres de las especialidades (que pueden ser mas de una) se repiten aun mas.

Esto no es un problema en phpmyadmin, el problema es obviamente al generar un codigo en php, ya que al tratar de hacer un bucle para los registros que dan mas de un resultado, se me duplican.

ejemplo segun un solo medico:
nombre1 apellidos1 ciudad1 especialidad1
nombre1 apellidos1 ciudad1 especialidad2
nombre1 apellidos1 ciudad2 especialidad1
nombre1 apellidos1 ciudad2 especialidad2

como digo, en mysql no es problema, pero en php para presentarlo en pantalla web no me sale

bueno, si alguien puede prestarme una idea seria eselente, sino no problem, ya han echo demasiado por este cuerpo decadente,,,jajjajajaa

Un saludo!!

Por Impalss

9 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Feb 2012 10:37 pm
Me gustaría que pongas la consulta que haces tu.

No sé mucho sobre LEFT JOIN, pero creo que es lo que necesitarías.

Código MySQL :

SELECT medicos.*, medicos_especialidades.*, medicos_ciudades.*
FROM `medicos`
LEFT JOIN medicos_especialidades ON medicos_especialidades.id_medico = medicos.id_med
LEFT JOIN medicos_ciudades ON medicos_ciudades.id_medico = medicos.id_med

Creo que con eso ya está. Tu inténtalo y me dices

Por Night~

43 de clabLevel



Genero:Masculino  

Geek, Gamer, Otaku

chrome
Citar            
MensajeEscrito el 18 Feb 2012 08:01 pm
Gracias por la respuesta..bueno es exactamente lo lo que hago, o sino cuando tengo que seleccionar solo un medico y las ciudades donde atiende lo identifico por id, ejemplo:

"

Código MySQL :

Select .....from medicos, medicos, ciudades where id_medico=ejemplo 1";


el problema es en php...cuando me devuelve el resultado de la consulta.
ejemplo: si el medico atiende en 2 ciudades y tiene 3 especialidades, me muestra en pantalla:
ciudad 1 y 3 especialidades
ciudad 2 y 3 especialidades, lo cual me da 6 registros.

Lo otro que estaba pensando es hacer lo siguiente pero no creo que me lo recomienden, son las 3 consultas por separado, en todo caso ¿cual seria el problema???:

Código PHP :

<?php
   $id_med=1;
      $link=mysql_connect("localhost", "root","");
      $base=mysql_select_db("medicos");
      //*************CONSULTA 1*****************
      $sql_1="SELECT nombre, apellidos, nombre_reg
      FROM medicos
      WHERE id_med=$id_med";
      $consulta_1=mysql_query($sql_1);
      $filas_1=mysql_fetch_array($consulta_1);
      echo $filas_1['nombre'].' ';
      echo $filas_1['apellidos'].'<br>';
      echo '• '.$filas_1['nombre_reg'].'<br>';
      //*****CONSULTA 2.CIUDADES********************
      $sql_2="SELECT nombre_ciu
      FROM anexo_1
      WHERE id_med=$id_med";
      $consulta_2=mysql_query($sql_2);
      $total=mysql_num_rows($consulta_2);
      //echo $total;
         for ($i=0; $i<$total; $i++)
            {
            $filas=mysql_fetch_array($consulta_2);
            echo '• '.$filas['nombre_ciu']." ";
            }
         echo '<br>';
      //****CONSULTA 3.ESPECIALIDADES*****************
      $sql_3="SELECT nombre_esp
      FROM anexo_2
      WHERE id_med=$id_med";
      $consulta_3=mysql_query($sql_3);
      $total=mysql_num_rows($consulta_3);
      //echo $total;
         for ($i=0; $i<$total; $i++)
            {
            $filas=mysql_fetch_array($consulta_3);
            echo '• '.$filas['nombre_esp'].' ';
            }
?>


Bueno gracias por la respuesta Night, vamos a ver como solucionar este asunto, un saludo!!

Por Impalss

9 de clabLevel



 

opera
Citar            
MensajeEscrito el 18 Feb 2012 08:51 pm
hola,

Podrías volver a explicar la estructura de las tablas ( que mencionaste en tu primer mensaje ), no logré comprender como obtienes las especialidades por ciudad en la que atiende si no hay ninguna referencia con las tablas de "especialidades",

Creo que el error está en las consultas :P

Saludos!

Por eddyw

3 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Feb 2012 08:12 pm
Bueno, tengo una tabla llamada especialidades, pero no la ocupo para las consultas ya que mi relacion es: Medicos-------n------ejercen------m-------especialidad, por lo tanto cree una tabla llamada relmedesp (relacion medico especialidad)

Al igual que Medicos -------n-----atienden-----m----- ciudad, por lo tanto, aca tambien ocupo la relacion,

Otra cosa, la clave foranea de relmedesp es (nombre), decidi no ocupar una id porque el nombre de las ciudades no se va a repetir.

la clave foranea de relmedciu (nombre tambien) ya uqe los nombre de especialidades tampoco se repiten

eso seria.....ojala sirva!!

Por Impalss

9 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Feb 2012 04:40 pm
Este es el resultado que quiero lograr:
-juan perez pereira.
-medicina general, cardiologia.
atiende en: ciudad 1, ciudad 2, ciudad 3.

El problema: cuando selecciono los registro con un bucle for:

-juan
-perez pereira.
-medicina general
-ciudad 1

-juan
-perez pereira
-cardiologia
-ciudad 1

-juan
-perez pereira
-medicina general
-ciudad 2

-juan
-perez pereira
-cardiologia
-ciudad 2

-juan
-perez pereira
-medicina general
-ciudad 3

-juan
-perez pereira
-cardiologia
-ciudad 3

ese es el cuento....

Por Impalss

9 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Feb 2012 06:51 pm


de vuelta a consultar,jjjjajaaa..ahora mi pregunta: se puede hacer eso y que el resultado con php sea asi sin tener uqe hacer mas de una consulta?? o bueno si no se puede hacer en sql. almenos se puede imprimer en pantalla los datos cmo apareen ahi???no me refiero a la parte grafica, no al diseño, sino que a la respuesta.

otro saludote....

Por Impalss

9 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.