Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Estas en el tema de mostrar las dos ciudades (dir empresa y fiscal) de una empresa en el foro de Mysql en Foros del Web. Hola a todos, hoy vengo con un detallito que ha de ser sencillo pero no se como hacerlo. Tengo una tabla con ciudades y su ...
  #1 (permalink)  
Antiguo 13/09/2011, 10:17
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Hola a todos, hoy vengo con un detallito que ha de ser sencillo pero no se como hacerlo.

Tengo una tabla con ciudades y su correspondiente id, tambien tengo una tabla de empresas que tiene dos foraneas hacia ciudades, ci_id y ci_idf, estas ciudades pueden ser diferentes y lo que no encuentro como hacer es que me muestre la ciudad que corresponda a cada id (me muestra el primero en las dos).

Esta es la consulta que tengo:

Código MySQL:
Ver original
  1. SELECT EM.em_id,EM.em_foliosol,EM.em_nombrecom,EM.em_razonsocial,US.us_nombre AS Aplicante,
  2. US.us_nombre AS Solicitante,EM.em_dir1,EM.em_tel1,EM.em_tel2,CI.ci_nombre,EM.em_cp,
  3.  SC.sc_descr,EM.em_rfc, EM.em_dirf, CI.ci_nombre,EM.em_contacto,EM.em_email, EM.em_webpage,
  4.  EM.em_afiliacion,EM.em_vigencia,EM.em_costo,Em.em_comentarios, IF(EM.em_propdiseno=TRUE,"Si","No") AS em_propdiseno,
  5.  EM.em_formapago,EM.em_fechaafil,SB.sb_nombre FROM usuarios AS US,usuarios AS US1,ciudades AS CI,ciudades AS  CI1,
  6. empresas AS EM, estatus_clientes AS SC, subcategorias AS SB
  7. WHERE CI.ci_id=EM.ci_id AND Ci1.ci_id=EM.ci_idf AND SC.sc_id=EM.sc_id AND US.us_id=EM.us_id AND US1.us_id=EM.us_id2 AND SB.sb_id=EM.sb_id

Hay otras tablas que tienen relacion como es usuarios donde tambien hay dos ids de usuarios en la tabla empresas y pues aplica la misma que con las ciudades.

Gracias de antemano, mientras hare las otras consultas.
  #2 (permalink)  
Antiguo 13/09/2011, 12:21
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 13 años, 1 mes
Puntos: 447
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Hola LOD_Fredy:

Cuando en un registro tienes referencias múltiples sobre otra tabla, lo que puedes hacer es referencias la misma tabla varias veces, utilizando un alias distinto, checa este script para ver si se entiende un poco mejor:

Código MySQL:
Ver original
  1. mysql> create table ciudades (idCiudad int, descripcion varchar(15));
  2. Query OK, 0 rows affected (0.16 sec)
  3.  
  4. mysql> insert into ciudades values (1, 'Uno'), (2, 'Dos'), (3, 'Tres');
  5. Query OK, 3 rows affected (0.11 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> select * from ciudades;
  9. +----------+-------------+
  10. | idCiudad | descripcion |
  11. +----------+-------------+
  12. |        1 | Uno         |
  13. |        2 | Dos         |
  14. |        3 | Tres        |
  15. +----------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> create table empresas (idEmpresa int, descripcion varchar(15),
  19.     -> idCiudad1 int, idCiudad2 int);
  20. Query OK, 0 rows affected (0.08 sec)
  21.  
  22. mysql> insert into empresas values (1, 'Empresa 1', 1, 1),
  23.     -> (2, 'Empresa 2', 1, 2), (3, 'Empresa 3', 2, 3), (4, 'Empresa 4', 3, 3);
  24. Query OK, 4 rows affected (0.03 sec)
  25. Records: 4  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> select * from empresas;
  28. +-----------+-------------+-----------+-----------+
  29. | idEmpresa | descripcion | idCiudad1 | idCiudad2 |
  30. +-----------+-------------+-----------+-----------+
  31. |         1 | Empresa 1   |         1 |         1 |
  32. |         2 | Empresa 2   |         1 |         2 |
  33. |         3 | Empresa 3   |         2 |         3 |
  34. |         4 | Empresa 4   |         3 |         3 |
  35. +-----------+-------------+-----------+-----------+
  36. 4 rows in set (0.00 sec)
  37.  
  38. mysql> select E.idEmpresa, E.descripcion descEmpresa,
  39.     -> C1.descripcion descCiudad1, C2.descripcion descCiudad2
  40.     -> from empresas E
  41.     -> inner join ciudades C1 on E.idCiudad1 = C1.idCiudad
  42.     -> inner join ciudades C2 on E.idCiudad2 = C2.idCiudad;
  43. +-----------+-------------+-------------+-------------+
  44. | idEmpresa | descEmpresa | descCiudad1 | descCiudad2 |
  45. +-----------+-------------+-------------+-------------+
  46. |         1 | Empresa 1   | Uno         | Uno         |
  47. |         2 | Empresa 2   | Uno         | Dos         |
  48. |         3 | Empresa 3   | Dos         | Tres        |
  49. |         4 | Empresa 4   | Tres        | Tres        |
  50. +-----------+-------------+-------------+-------------+
  51. 4 rows in set (0.03 sec)

Observa que la tabla Ciudades se repite dos veces (como C1, y C2) por lo tanto puedes hacer un inner join con los campos respectivos de la tabla empresa. Creo que es más o menos lo que necesitas, pero si continuas con problemas lo comentas para tratar de ayudarte.

Y como comentario final UTILIZA SIEMPRE JOIN'S (INNER, LEFT O RIGTH según sea el caso) en lugar de listar las tablas en el FROM separadas por comas y haciendo las uniones en el WHERE. Además de mejorar el rendimiento de las consultas, el código queda más legible.

Saludos
Leo.
  #3 (permalink)  
Antiguo 13/09/2011, 13:11
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Intente lo de 2 veces la tabla con alias diferente y no funciona, de hecho sin poner lo de las dos tablas, si pongo ids de ciudad diferentes en el registro, no me lo muestra, ahora, no se si tenga que ver que foranea es solo 1 ciudad (la de la empresa), la otra ciudad puede o no existir (que seria la de la direccion fiscal) por eso la colmuna permite nulos (un 0, siendo int).
  #4 (permalink)  
Antiguo 13/09/2011, 15:53
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 13 años, 1 mes
Puntos: 447
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Hola de nuevo LOD_Fredy:

Cuando tienes una relación 0 a 1 o 0 a muchos, es decir donde un valor puede o no existir en una tabla debes utilizar un LEFT JOIN o RIGTH JOIN, dependiendo de cómo estás organizando tus tablas. la relación INNER JOIN implica una relación 1 a 1.

En cuanto a la consulta que te propuse, dices que no funciona, pero no nos dices si te marcó algún error, si no te regresa los resultados esperados o cualquier información adicional que nos permita saber por donde está el error. En mi caso (no sé si algún otro forista lo sea) no soy adivino, por lo tanto me es imposible determinar donde está el problema.

El doble alias FUNCIONA, y para ejemplo está el script que te puse. Intenta hacer un LEFT JOIN con el segundo campo, el que dices que puede existir o no para ver si funciona. Si continuas en problemas POR FAVOR, TOMATE CINCO MINUTOS PARA REDACTAR UN POST CON ALGO MÁS DE INFORMACIÓN postea la sentencia que estás generando, si te marca algún error entonces dinos cuál es el código del error, si el resultado obtenido no es el esperado entonces dinos qué es lo que está sacando la consulta y qué es lo que necesitas obtener y si es posible pon algunos datos de ejemplo. Entre más información nos puedas dar más fácil será tratar de ayudarte.

Saludos
Leo.
  #5 (permalink)  
Antiguo 13/09/2011, 18:14
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

intente esto

Código MySQL:
Ver original
  1. SELECT EM.em_id,EM.em_foliosol,EM.em_nombrecom,EM.em_razonsocial,US.us_nombre AS Aplicante,
  2. US1.us_nombre AS Solicitante,EM.em_dir1,EM.em_tel1,EM.em_tel2,CI1.ci_nombre AS Ciudad,EM.em_cp,
  3.  SC.sc_descr,EM.em_rfc, EM.em_dirf, CI2.ci_nombre,EM.em_contacto,EM.em_email, EM.em_webpage,
  4.  EM.em_afiliacion,EM.em_vigencia,EM.em_costo,Em.em_comentarios, IF(EM.em_propdiseno=TRUE,"Si","No") AS em_propdiseno,
  5.  EM.em_formapago,EM.em_fechaafil,SB.sb_nombre FROM usuarios AS US,usuarios AS US1,
  6.  ciudades AS CI1 INNER JOIN empresas AS EM1 ON CI1.ci_id=EM1.ci_id,
  7.  ciudades AS CI2 INNER JOIN empresas AS EM2 ON CI2.ci_id=EM2.ci_idf,
  8. empresas AS EM, estatus_clientes AS SC, subcategorias AS SB
  9. WHERE SC.sc_id=EM.sc_id AND US.us_id=EM.us_id AND US1.us_id=EM.us_id2 AND SB.sb_id=EM.sb_id

y no me devuelve nada (tampoco marca error), en la tabla tengo esto (yo no uso la consola de mysql)

Código HTML:
Ver original
  1. <h3>query result</h3><table border=1>
  2. <tr>
  3. <td bgcolor=silver class='medium'>Empresa</td><td bgcolor=silver class='medium'>us_id</td><td bgcolor=silver class='medium'>us_id2</td><td bgcolor=silver class='medium'>ci_id</td><td bgcolor=silver class='medium'>ci_idf</td></tr>
  4. <tr>
  5. <td class='normal' valign='top'>a</td>
  6. <td class='normal' valign='top'>3</td>
  7. <td class='normal' valign='top'>2</td>
  8. <td class='normal' valign='top'>1</td>
  9. <td class='normal' valign='top'>3</td>
  10. </tr>
  11. <tr>
  12. <td class='normal' valign='top'>dsadsa</td>
  13. <td class='normal' valign='top'>10</td>
  14. <td class='normal' valign='top'>3</td>
  15. <td class='normal' valign='top'>1</td>
  16. <td class='normal' valign='top'>1</td>
  17. </tr>
  18. <tr>
  19. <td class='normal' valign='top'>dasdas</td>
  20. <td class='normal' valign='top'>15</td>
  21. <td class='normal' valign='top'>3</td>
  22. <td class='normal' valign='top'>1</td>
  23. <td class='normal' valign='top'>1</td>
  24. </tr>
  25. <tr>
  26. <td class='normal' valign='top'>asfgfd</td>
  27. <td class='normal' valign='top'>11</td>
  28. <td class='normal' valign='top'>3</td>
  29. <td class='normal' valign='top'>1</td>
  30. <td class='normal' valign='top'>1</td>
  31. </tr>

disculpa que lo ponga asi pero me dio algo de flojera sacar una imagen, subirla, etc.
Si es necesaria la imagen lo haria pero hasta que llegue a mi casa para subirla a mi hosting.
  #6 (permalink)  
Antiguo 13/09/2011, 19:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.323
Antigüedad: 12 años, 2 meses
Puntos: 2654
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Cita:
y no me devuelve nada (tampoco marca error),
Si no te marca error, pero no devuelve datos, lo que no tienes son registros que cumplan la condición tal y como la estás poniendo.
Lo realmente difícil es entender cuáles son las condiciones indicadas en tu SELECT, porque has hecho una consulta excesivamente complicada, con condiciones no muy claras y mezclando JOINS implícitos con INNER JOIN, sin que se pueda determinar si esos JOIN (la coma, para más datos) están correctamente planteados.
A mi entender, la forma en que has escrito la consulta hace que el resultado pueda ser errático.
El resto (el HTML) es irrelevante, porque este foro no es de HTML, sino de MySQL. No se deben postear códigos no SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/09/2011 a las 19:14
  #7 (permalink)  
Antiguo 14/09/2011, 09:31
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 13 años, 1 mes
Puntos: 447
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Lo que te comenta el compañero gnzsoloyo te lo hice notar desde el primer post

Cita:
Y como comentario final UTILIZA SIEMPRE JOIN'S (INNER, LEFT O RIGTH según sea el caso) en lugar de listar las tablas en el FROM separadas por comas y haciendo las uniones en el WHERE. Además de mejorar el rendimiento de las consultas, el código queda más legible.
Ahora bien, estás entendiendo mal el concepto de duplicar las tablas con alias:

Si tu tabla "Principal" o base es EMPRESAS esta NO TIENES QUE DUPLICARLA, las que tienes que duplicar son las tablas que hacen referencia a los campos referenciados en esta tabla

Código:
FROM empresas EM
INNER JOIN ciudades CI1 ON EM.ci_id = CI1.ci_id
LEFT JOIN ciudades CI2 ON EM.ci_idf = CI2.ci_id
INNER JOIN usuarios US1 ON EM.us_id = US1.us_id
LEFT JOIN usuarios US2 ON EM.us_id2 = US1.us_id
En tu consulta tienes TRES VECES DECLARADA TU TABLA EMPRESAS

Código:
empresas AS EM1
empresas AS EM2
empresas AS EM
Lo cual es incorrecto. Trata de convertir tu consulta a utilizar solamente una tabla en el FROM y las demás como JOIN's, de tal manera que tampoco en el WHERE existan condiciones de unión (todas deberían estar en el ON)

Saludos
Leo
  #8 (permalink)  
Antiguo 14/09/2011, 12:51
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

hice esto

Código MySQL:
Ver original
  1. SELECT EM.em_id,EM.em_foliosol,EM.em_nombrecom,EM.em_razonsocial,US.us_nombre AS Aplicante,
  2. US1.us_nombre AS Solicitante,EM.em_dir1,EM.em_tel1,EM.em_tel2,CI1.ci_nombre AS Ciudad,EM.em_cp,
  3.  SC.sc_descr,EM.em_rfc, EM.em_dirf, CI2.ci_nombre,EM.em_contacto,EM.em_email, EM.em_webpage,
  4.  EM.em_afiliacion,EM.em_vigencia,EM.em_costo,Em.em_comentarios, IF(EM.em_propdiseno=TRUE,"Si","No") AS em_propdiseno,
  5.  EM.em_formapago,EM.em_fechaafil,SB.sb_nombre
  6.  FROM empresas AS EM INNER JOIN ciudades AS CI1 ON CI1.ci_id=EM.ci_id LEFT JOIN ciudades AS CI2 ON CI2.ci_id=EM.ci_idf
  7.   INNER JOIN subcategorias AS SB ON SB.sb_id=EM.sb_id INNER JOIN estatus_clientes AS SC ON SC.sc_id=EM.sc_id
  8.   INNER JOIN usuarios AS US ON US.us_id=EM.us_id INNER JOIN usuarios AS US1 ON US1.us_id=EM.us_id2

me devuelve solo un registro (el ultimo de 5 que son) cuando en teoria deberia devolverme todos.

Ademas, llevaria en el WHERE que empresa es (para fines de modificar los datos de una empresa), por ejemplo WHERE EM.em_id=1, lo intente agregando eso y no me devuelve nada (tampoco marca error).
  #9 (permalink)  
Antiguo 14/09/2011, 13:25
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Edito:

Ya funciono, el problema era que el us_id2 no tenia su indice y que hacia referencia a registros en usuarios que no existen, puse ids que existen y todo arreglado, muchas gracias.

Última edición por LOD_Fredy; 14/09/2011 a las 14:26
  #10 (permalink)  
Antiguo 15/09/2011, 11:02
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Reabro:

No me sale la consulta que diria yo es la mas complicada:

Necesito mostrar las empresas que ha registrado un gerente, asi como las de sus vendedores, para esto, en la tabla usuarios hay 2 ids, us_id que es el id del usuario a registrar, y us_id2, que es el usuario que esta registrando (es decir, en us_id2 van ids de los gerentes y el us_id seria el id de los vendedores), entonces, con esto en mente he intentado mostrar las empresas que puede ver un usuario del tipo gerente pero no me muestra nada, he aqui la consulta (lo he intentado de varias formas):

Código MySQL:
Ver original
  1. SELECT EM.em_id,Em.em_foto,EM.em_foliosol,EM.em_nombrecom,EM.em_razonsocial,EM.us_id2,US.us_nombre AS Aplicante,
  2. US1.us_nombre AS Solicitante,EM.em_dir1,EM.em_tel1,EM.em_tel2,CI1.ci_nombre AS Ciudad,EM.em_cp,
  3.  SC.sc_descr,EM.em_rfc, EM.em_dirf, CI2.ci_nombre AS 'Ciudad Fiscal',EM.em_contacto,EM.em_email, EM.em_webpage,
  4.  EM.em_afiliacion,EM.em_vigencia,EM.em_costo,Em.em_comentarios, IF(EM.em_propdiseno=TRUE,"Si","No") AS em_propdiseno,
  5.  EM.em_formapago,EM.em_fechaafil,SB.sb_nombre
  6.  FROM empresas AS EM INNER JOIN ciudades AS CI1 ON CI1.ci_id=EM.ci_id LEFT JOIN ciudades AS CI2 ON CI2.ci_id=EM.ci_idf
  7.   INNER JOIN subcategorias AS SB ON SB.sb_id=EM.sb_id INNER JOIN estatus_clientes AS SC ON SC.sc_id=EM.sc_id
  8.   INNER JOIN usuarios AS US ON US.us_id=EM.us_id INNER JOIN usuarios AS US1 ON US1.us_id=EM.us_id2,
  9.    usuarios AS US2 LEFT JOIN usuarios AS US3 ON US2.us_id=US3.us_id2 WHERE US2.us_id=8 AND US2.us_id2=8

Ojala puedan ayudarme a armar esa consulta, creo seria la ultima consulta para terminar la parte funcional de la pagina.

Gracias y disculpen la molestia
  #11 (permalink)  
Antiguo 15/09/2011, 16:39
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Ojala alguien pueda ayudarme con esa consulta, estoy por terminar la pagina y me falta esa consulta.
  #12 (permalink)  
Antiguo 15/09/2011, 21:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.323
Antigüedad: 12 años, 2 meses
Puntos: 2654
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Llamas cuatro veces a la tabla "usuarios", pero sólo existen dos campos con que relacionarla. Dos de las llamadas son innecesarias.
Además, ten en cuenta que el uso de los INNEER JOIN obliga a que todos las condiciones se cumplan si o si. Si una de las tablas vinculadas por INNER JOIN no se cumple, no devolverá ningún resultado.
Prueba así:
Código MySQL:
Ver original
  1.     EM.em_id,
  2.     Em.em_foto,
  3.     EM.em_foliosol,
  4.     EM.em_nombrecom,
  5.     EM.em_razonsocial,
  6.     EM.us_id2,
  7.     US.us_nombre Aplicante,
  8.     US1.us_nombre Solicitante,
  9.     EM.em_dir1,
  10.     EM.em_tel1,
  11.     EM.em_tel2,
  12.     CI1.ci_nombre Ciudad,
  13.     EM.em_cp,
  14.     SC.sc_descr,
  15.     EM.em_rfc,
  16.     EM.em_dirf,
  17.     CI2.ci_nombre 'Ciudad Fiscal',
  18.     EM.em_contacto,
  19.     EM.em_email,
  20.     EM.em_webpage,
  21.     EM.em_afiliacion,
  22.     EM.em_vigencia,
  23.     EM.em_costo,
  24.     Em.em_comentarios,
  25.     IF(EM.em_propdiseno=TRUE,'Si','No') em_propdiseno,
  26.     EM.em_formapago,
  27.     EM.em_fechaafil,
  28.     SB.sb_nombre
  29.  FROM
  30.     empresas EM
  31.     INNER JOIN ciudades CI1 ON EM.ci_id = CI1.ci_id
  32.     LEFT JOIN ciudades CI2 ON EM.ci_id = CI2.ci_idf
  33.     INNER JOIN subcategorias SB ON EM.sb_id = SB.sb_id
  34.     INNER JOIN estatus_clientes SC ON EM.sc_id = SC.sc_id
  35.     INNER JOIN usuarios US ON EM.us_id = US.us_id
  36.     INNER JOIN usuarios US1 ON EM.us_id = US1.us_id2 AND US.us_id=US1.us_id2
  37.     US.us_id=8;
Si esto falla, ve paulatinamente, desde la relación más simple, y agregale de a una tabla por vez, para ver con cual ya no devuelve datos.
Empieza entonces por acá:
Código MySQL:
Ver original
  1.     EM.em_id,
  2.     Em.em_foto,
  3.     EM.em_foliosol,
  4.     EM.em_nombrecom,
  5.     EM.em_razonsocial,
  6.     EM.us_id2,
  7.     US.us_nombre Aplicante,
  8.     EM.em_dir1,
  9.     EM.em_tel1,
  10.     EM.em_tel2,
  11.     EM.em_cp,
  12.     EM.em_rfc,
  13.     EM.em_dirf,
  14.     EM.em_contacto,
  15.     EM.em_email,
  16.     EM.em_webpage,
  17.     EM.em_afiliacion,
  18.     EM.em_vigencia,
  19.     EM.em_costo,
  20.     Em.em_comentarios,
  21.     IF(EM.em_propdiseno=TRUE,'Si','No') em_propdiseno,
  22.     EM.em_formapago,
  23.     EM.em_fechaafil
  24.  FROM
  25.     empresas EM
  26.     INNER JOIN usuarios US ON EM.us_id = US.us_id
  27.     US.us_id=8;
y ve agregando una tabla por vez. No intentes sacar todo de una sola vez.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 16/09/2011, 14:03
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Ya quedo, la consulta final es esta

Código MySQL:
Ver original
  1. SELECT EM.em_id,EM.em_foliosol,EM.em_nombrecom,EM.em_razonsocial,US.us_nombre AS Aplicante,
  2. US1.us_nombre AS Solicitante,EM.em_dir1,EM.em_tel1,EM.em_tel2,CI1.ci_nombre AS Ciudad,EM.em_cp,
  3.  SC.sc_descr,EM.em_rfc, EM.em_dirf, CI2.ci_nombre,EM.em_contacto,EM.em_email, EM.em_webpage,
  4.  EM.em_afiliacion,EM.em_vigencia,EM.em_costo,Em.em_comentarios, IF(EM.em_propdiseno=TRUE,"Si","No") AS em_propdiseno,
  5.  EM.em_formapago,EM.em_fechaafil,SB.sb_nombre
  6.  FROM empresas AS EM INNER JOIN ciudades AS CI1 ON CI1.ci_id=EM.ci_id LEFT JOIN ciudades AS CI2 ON CI2.ci_id=EM.ci_idf
  7.   INNER JOIN subcategorias AS SB ON SB.sb_id=EM.sb_id INNER JOIN estatus_clientes AS SC ON SC.sc_id=EM.sc_id
  8.   INNER JOIN usuarios US ON EM.us_id2 = US.us_id INNER JOIN usuarios AS US1 ON US1.us_id=EM.us_id WHERE US.us_id=4 OR US.us_id2=4

Muchas gracias.
  #14 (permalink)  
Antiguo 20/09/2011, 11:26
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Hola a todos, reabro tema pues me surgio un detalle con otra consulta donde intente utilizar lo que aqui me dijeron, el problema es este:

Tengo una tabla de salida de articulos y una con el detalle de la salida (los articulos que salieron), tengo otra tabla de retornos de articulos (que hace referencia a la salida y el detalle de salida y al articulo) donde puede haber varios retornos para la misma salida (obvio sin pasarse del numero de articulos que salieron), y todas estas salidas pertenecen a x centro de costos, entonces, tengo la siguiente consulta (trae mas cosas pues es la completa).

Código MySQL:
Ver original
  1. SELECT CC.cc_concepto AS 'Centro de Costos',SA.sa_id AS Salida,UN.un_nombre AS Unidad,AR.ar_nombre AS Artículo,
  2. AR.ar_descripcion AS Descripción,TA.ta_concepto AS Tipo,DS.ds_cant AS 'Cant. Prestada', rt.rt_cant AS 'Cant. Devuelta',
  3. SA.`sa_fecha` AS Fecha
  4. articulos AS AR INNER JOIN detalle_salidas AS DS ON Ar.ar_id=DS.ar_id
  5. INNER JOIN tipo_articulo AS TA ON Ta.ta_id=Ar.ta_id
  6. INNER JOIN unidades AS UN ON Un.un_id=Ar.un_idsalida
  7. LEFT JOIN retornos AS RT ON AR.ar_id=RT.ar_id AND DS.ds_id=Rt.ds_id
  8. LEFT JOIN salidas AS SA ON SA.sa_id=RT.sa_id OR SA.sa_id=DS.sa_id  INNER JOIN centro_costos AS CC ON CC.cc_id=SA.cc_id LEFT JOIN usuarios AS US ON Sa.us_id=Us.us_id WHERE US.us_nombre='fredy' AND AR.ar_retornable=1 AND SA.sa_fecha BETWEEN '2011-01-01' AND '2011-11-01' ORDER BY AR.ar_nombre

en este caso me traigo los articulos que han salido y las cantidades que han sido regresadas correspondientes a x usuario en x fecha, cabe mencionar, que puede haber varias salidas de un mismo articulo para un mismo centro de costos por lo que necesito sumar esas cantidades asi como sumar las cantidades regresadas pues para un mismo detalle de salida puede haber varios retornos y aqui es donde esta el problema pues, por ejemplo, tengo la salida 1 y su detalle salida 1 que trae el articulo 1 del que pidieron 50 piezas, entonces hacen un retorno de 10, luego uno de 20, luego otro de 20 para regresar asi las 50 piezas. Esto hace que tenga 3 retornos para un mismo detalle de salida por lo que con la consulta mostrada me traeria 3 registros con cantidad prestada 10 y cantidad regresada 10,20,20, si hago un sum de la cantidad que ha salido del articulo me dice que 150 ya que suma los 3 registros que se crean por los 3 retornos, entonces esa cantidad esta mal.

Segun yo, necesito hacer que me salgan como null los registros de detalles de salidas que "no existen, ya que solo hay un detalle salida y asi al hacer el sum me muestre la cantidad correcta, es por eso que puse la consulta asi, sin sums ni groups by.

Ojala puedan ayudarme, de nuevo, es lo unico que me falta para terminar ese y otro reporte que es el mismo,nada mas cambio lo del where.

si tienen dudas o necesitan algo mas me dicen
  #15 (permalink)  
Antiguo 20/09/2011, 17:31
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 10 años, 9 meses
Puntos: 3
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Por favor ayudaaaa xD, enserio es todo lo que me falta =(.

Etiquetas: dir, empresa, fiscal, select, tabla, ciudad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




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