|
Ver temas sin respuesta | Ver temas activos
Foros Linux » Desarrollo » Programación
Página 1 de 1
|
[ 10 mensajes ] |
|
| Autor |
Mensaje |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Jue Sep 02, 2010 12:22 pm |
|
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
|
|
|
|
 |
dracel

Forista Mayor
Registrado: Vie Jun 06, 2008 11:00 pm Mensajes: 627 Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris
|
 Publicado: Jue Sep 02, 2010 6:31 pm |
|
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 
_________________ como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Jue Sep 02, 2010 10:46 pm |
|
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
|
|
|
|
 |
dracel

Forista Mayor
Registrado: Vie Jun 06, 2008 11:00 pm Mensajes: 627 Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris
|
 Publicado: Vie Sep 03, 2010 4:03 am |
|
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
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Vie Sep 03, 2010 3:57 pm |
|
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_ctrate en ponerle un alias a meetings m pero nada... Saludos.
_________________ http://greer.nodolinux.com
|
|
|
|
 |
dracel

Forista Mayor
Registrado: Vie Jun 06, 2008 11:00 pm Mensajes: 627 Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris
|
 Publicado: Lun Sep 06, 2010 8:12 am |
|
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 
_________________ como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Mar Sep 14, 2010 11:28 am |
|
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
|
|
|
|
 |
dracel

Forista Mayor
Registrado: Vie Jun 06, 2008 11:00 pm Mensajes: 627 Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris
|
 Publicado: Mar Sep 14, 2010 5:17 pm |
|
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 
_________________ como hacer preguntas inteligentes
Sean tan amables de poner la etiqueta de (SOLUCIONADO) cuando consigan solucionar su problema
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Mar Sep 14, 2010 6:14 pm |
|
|
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
|
|
|
|
 |
dracel

Forista Mayor
Registrado: Vie Jun 06, 2008 11:00 pm Mensajes: 627 Ubicación: España/Galicia/Pontevedra/Baiona/Sabaris
|
 Publicado: Mié Sep 15, 2010 7:23 am |
|
|
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
|
|
|
|
 |
|
|
|
Página 1 de 1
|
[ 10 mensajes ] |
|
¿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
|
|