Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 10 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Jue Sep 02, 2010 12:22 pm 
Arriba  
Hola que ta,

jeje nuevamente salgo con un problemita que al parecer es una tonteria pero estoy que trato y trato y no encuentro la forma...

Estoy haciendo un reporte en excel donde extraigo datos de una base de datos (mysql) la cuestion es que cuando vinculo una tabla con otra solo me muestra en el excel los registros vinculados y los que no, no...

Código:
//Consulta a la base de datos
$query = "SELECT
      m.name estudio,
      m.date_start fecha,
      iec.tipo_ecocardiogama_c tipo_estudio,
      mc.estudio_c estudio2
   FROM
      meetings m,
      infor_ecocardiograma_cstm iec,
      meetings_inocardiograma_c mic,
      meetings_cstm mc
   WHERE
      mc.id_c = m.id
      AND mic.meetings_inardiograma_idb = iec.id_c
      AND mic.meetings_inmameetings_ida = mc.id_c
      AND m.date_start between '$desde' and '$hasta' ORDER BY m.date_start";


El campo:
Código:
m.name estudio
de la base
Código:
meetings m
tiene un sin fin de registros estos van en la primera columna y en la segunda columna de mi excel van los registros:
Código:
iec.tipo_ecocardiogama_c tipo_estudio
de la base
Código:
infor_ecocardiograma_cstm iec
entonces el problema esta aqui, ya que son unos pocos registros de la primera columna que tienen un vinculo con la segunda pero al momneto de ejecutarlo en el excel solo me muestra los registros vinculados y los que no tienen un vinculo no salen... no se si me explique bien...

la base:
Código:
meetings_inocardiograma_c mic
es la que sirve de vinculo entre las base:
Código:
infor_ecocardiograma_cstm iec
y
Código:
meetings m

si quito ese vinculo si me aparecen todos los registros de:
Código:
meetings m
pero no obstante los registros de la segunda columna... pero cuando los vinculo si me salen pero solo los vinculados y no me muestra todos los registros de:
Código:
meetings m


si alguien sabe como puedo seguir adelante, se lo agradeceria.

Saludos.

_________________
http://greer.nodolinux.com


Última edición por greer el Vie Oct 15, 2010 10:09 pm, editado 1 vez en total
 Perfil WWW  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Vie Jun 06, 2008 11:00 pm
Mensajes: 627
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Jue Sep 02, 2010 6:31 pm 
Arriba  
Umm no soy muy ducho con las bases de datos y encima no se que quieres sacar al final pero parece que el problema lo tienes en las relaciones yo intentaria hacerlo con outher join en vez de inner join (que esta implicito en el where)
A ver si aparece alguien con mas idea :D

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Jue Sep 02, 2010 10:46 pm 
Arriba  
si, algo como LEFT OUTER JOIN es lo que necesito, que aunque en la columna A no haya datos relacionados con la columna B, de igual forma apresca el registro (NULL)

yo tampoco se de base de datos y lo poco que se lo he leido de manuales basicos y demas...

Entonces modifique mi consulta usando LEFT OUTER JOIN y me quedo asi:

Código:
//Consulta a la base de datos
$query = "SELECT
      m.name estudio,
      m.date_start fecha,
      iec.tipo_ecocardiogama_c tipo_estudio
   FROM
      meetings m,
      meetings_inocardiograma_c mic

      LEFT OUTER JOIN infor_ecocardiograma_cstm iec
      ON mic.meetings_inardiograma_idb = iec.id_c
      ON mic.meetings_inmameetings_ida = m.id
   WHERE
      m.date_start between '$desde' and '$hasta' ORDER BY m.date_start";


Pero no me salio nada, alguien que sepa y me diga que hice mal ? a simple vista se ve bien pero obviamente hay algo mal, por que no me sale... :s

Siento que estoy mas serca de lograr lo que necesito,


Saludos

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Vie Jun 06, 2008 11:00 pm
Mensajes: 627
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Vie Sep 03, 2010 4:03 am 
Arriba  
Parece que esta mal la sintaxis creo yo
Código:
SELECT
      m.name estudio,
      m.date_start fecha,
      iec.tipo_ecocardiogama_c tipo_estudio
   FROM
      meetings m
         LEFT OUTER JOIN meetings_inocardiograma_c mic
            ON mic.meetings_inmameetings_ida = m.id
         LEFT OUTER JOIN infor_ecocardiograma_cstm iec
            ON mic.meetings_inardiograma_idb = iec.id_c
   WHERE
      m.date_start between '$desde' and '$hasta' ORDER BY m.date_start";


Así lo intentaria hacer yo, espero que sirva

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Vie Sep 03, 2010 3:57 pm 
Arriba  
si funciono, efectivamente tenia mal puesto las cosas... pero cuando trate de vincular otra columna, dejo de funcionar, entoces trate de ponerle un alias a la otra base pero nada... :s trate de varias formas pero tampoco, ahora es que se pone bueno y complicado la cosa jejeje

Asi funciona perfectamente y hace exactamante lo que tenia pensado.

Código:
//Consulta a la base de datos
$query = "SELECT
      m.name estudio,
      m.date_start fecha,
      iec.tipo_ecocardiogama_c tipo_estudio,
      a.name pasiente,
      ac.ci_c ci_pasiente,
      ac.procedencia_c procedencia,
      u.First_name,
      u.Last_name,
      u2.FIrst_name,
      u2.LAst_name
   FROM
      users u,
      users u2,
      accounts_cstm ac,
      accounts a,
      meetings m
         LEFT OUTER JOIN meetings_inocardiograma_c mic
            ON mic.meetings_inmameetings_ida = m.id
         LEFT OUTER JOIN infor_ecocardiograma_cstm iec
            ON mic.meetings_inardiograma_idb = iec.id_c
   WHERE
      u.id = m.assigned_user_id
      AND u2.id = m.created_by
      AND ac.id_c = a.id
      AND m.parent_id = a.id
      AND m.date_start between '$desde' and '$hasta' ORDER BY m.date_start";


Pero en esta hoja de calculo hace falta una columna (un SELECT) este campo, esta relacionado con meetings m pero al hacer lo mismo, usando LEFT OUTER JOIN vuelvo a lo mismo del principio y solo me muestra los campos que tienen relacion entre si...

el campo o el SELECT que hace falta es c.first_name y su base es contacts c y la tabla que relaciona con meetings m es meetings_infor_holter_c

trate en ponerle un alias a meetings m pero nada...

Saludos.

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Vie Jun 06, 2008 11:00 pm
Mensajes: 627
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Lun Sep 06, 2010 8:12 am 
Arriba  
Siento no haber podido responder. Según veo quieres meter todos los registros de c en m asi que la cosa me queda así (si es que es así, claro)
Código:
SELECT
      m.name estudio,
      m.date_start fecha,
      iec.tipo_ecocardiogama_c tipo_estudio,
      a.name pasiente,
      ac.ci_c ci_pasiente,
      ac.procedencia_c procedencia,
      u.First_name,
      u.Last_name,
      u2.FIrst_name,
      u2.LAst_name,
      c.first_name
   FROM
      users u,
      users u2,
      accounts_cstm ac,
      accounts a,
      contacts c
         RIGHT OUTER JOIN meetings m
            ON c.first_name = m.meetings_infor_holter_c     
         LEFT OUTER JOIN meetings_inocardiograma_c mic
            ON mic.meetings_inmameetings_ida = m.id
         LEFT OUTER JOIN infor_ecocardiograma_cstm iec
            ON mic.meetings_inardiograma_idb = iec.id_c
   WHERE
      u.id = m.assigned_user_id
      AND u2.id = m.created_by
      AND ac.id_c = a.id
      AND m.parent_id = a.id
      AND m.date_start between '$desde' and '$hasta' ORDER BY m.date_start

A ver si cuela :wink:

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Mar Sep 14, 2010 11:28 am 
Arriba  
me salio perfecto! gracias dracel,

tengo otra consulta, esta es una consulta un poco mas larga por que hay varias tablas que se relacionan con una en particular... pero des pues de la primera ya no me sale nada... te muestro.

Código:
//Consulta a la base de datos
$query = "SELECT
      m.name estudio,
      m.date_start fecha,
      a.name pasiente,
      ac.ci_c ci_pasiente,
      ac.procedencia_c procedencia,
      u.First_name,
      u.Last_name,
      u2.FIrst_name,
      u2.LAst_name,
      c.title numero_medico,
      c.first_name,
      c.last_name
      
   FROM
      infor_ecocardiograma ie,
      contacts_inocardiograma_c cic,
      meetings_inocardiograma_c mic,

      infor_holter ih,
      contacts_infor_holter_c cihc,
      meetings_infor_holter_c mihc,

      users u,
      users u2,
      accounts_cstm ac,
      accounts a,
      contacts c,
      meetings m

   WHERE
      u.id = m.assigned_user_id

      AND cic.contacts_inmacontacts_ida = c.id
      AND cic.contacts_inardiograma_idb = ie.id
      AND mic.meetings_inmameetings_ida = m.id
      AND mic.meetings_inardiograma_idb = ie.id

      AND cihc.contacts_inercontacts_ida = c.id
      AND cihc.contacts_infor_holter_idb = ih.id
      AND mihc.meetings_inermeetings_ida = m.id
      AND mihc.meetings_infor_holter_idb = ih.id

      AND u2.id = m.created_by
      AND ac.id_c = a.id
      AND m.parent_id = a.id
      AND m.date_start between '$desde' and '$hasta' ORDER BY m.date_start";


como veras hay dos tablas que se relacionan con meetings m y dos tablas que se relacionan con contacts c en WHERE separe con un espacio un grupo del otro para que veas... hay alguna forma de vincular varias tablas a esas dos ? por que no solo son esas dos hay mas...

A esto tambien le tengo que poner LEFT OUTER JOIN pero ya lo vere mas adelante, primero tengo que hacer esto. Como veras no se mucho o nada de MySQL he leido unos cuantos manuales y demas, pero no he visto o no hay nada relacionado con algo asi... a ver si tu conoces algo

Un saludo, y gracias.

pd.: yo seguire bscando y leyendo a ver si lo encuentro lo que necesito...

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Vie Jun 06, 2008 11:00 pm
Mensajes: 627
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Mar Sep 14, 2010 5:17 pm 
Arriba  
No se que quieres hacer. Si lo que buscas es hacer en una consulta lo que harías con dos (con las relaciones de cada uno de tus bloques de relaciones) intentaria usar union. Osea:
Código:
select campo1, campo2,.... from tabla1, tabla2,... where bloque1
union
select campo1, campo2,.... from tabla1, tabla2,... where bloque2;


Haber si la puedes moldear un poco con eso :oops:

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Mar Sep 14, 2010 6:14 pm 
Arriba  
barbaro!!!! dracel, impresionante! y eso que no sabes que es lo que queria hacer... si me funciono excatamente lo que queria, mejor y se daña jajaja hey pana gracias por la ayuda.

Saludos.

pd.: barbaro, barbaro jejeje

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Forista Mayor
Forista Mayor
Avatar de Usuario

Registrado: Vie Jun 06, 2008 11:00 pm
Mensajes: 627
Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris

Nota Publicado: Mié Sep 15, 2010 7:23 am 
Arriba  
Encantado de haberte podido ayudar. Hacia tiempo que no tocaba sql y esto me ayudo un poco a refrescar la memoria.
Hasta la proxima

_________________
como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 10 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO