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

Consulta union de tres tablas y ordenar

Estas en el tema de Consulta union de tres tablas y ordenar en el foro de Mysql en Foros del Web. hola amigos mi consulta es la siguiente $ssql="(SELECTcampo1,campo2 FROM `tabla1`,`tabla2` WHERE condicion1 order by fecha desc) UNION (SELECTcampo1,campo2 FROM `tabla1`,`tabla2` WHERE condicion2 order by fecha ...
  #1 (permalink)  
Antiguo 19/05/2010, 09:37
 
Fecha de Ingreso: octubre-2009
Mensajes: 68
Antigüedad: 14 años, 6 meses
Puntos: 1
Consulta union de tres tablas y ordenar

hola amigos mi consulta es la siguiente
$ssql="(SELECTcampo1,campo2

FROM `tabla1`,`tabla2`
WHERE condicion1
order by fecha desc)
UNION
(SELECTcampo1,campo2
FROM `tabla1`,`tabla2`
WHERE condicion2
order by fecha desc)
UNION
(SELECTcampo1,campo2
FROM `tabla1`,`tabla2`
WHERE condicion3
order by fecha desc
order by fecha desc)";
hasta ahi todo bien el problema es que no me ordena las fechas
tal vez order by no debe de ir en cada consulta si uno en general y no se como
es la sintaxis gracias
  #2 (permalink)  
Antiguo 19/05/2010, 12:15
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta union de tres tablas y ordenar

Código SQL:
Ver original
  1. (SELECTcampo1,campo2,campofecha
  2. FROM `tabla1`,`tabla2`
  3. WHERE condicion1)
  4. UNION
  5. (SELECTcampo1,campo2,campofecha
  6. FROM `tabla1`,`tabla2`
  7. WHERE condicion2)
  8. UNION
  9. (SELECTcampo1,campo2,campofecha
  10. FROM `tabla1`,`tabla2`
  11. WHERE condicion3 ORDER BY 3)

así tal vez?

El order lo cogería por todo el 3er campo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 21/05/2010, 08:32
 
Fecha de Ingreso: octubre-2009
Mensajes: 68
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Consulta union de tres tablas y ordenar

Este es todo mi codigo
$ssql="(SELECT t_ag_educativos.noIdentidad, t_ag_educativos.primerNombre, t_ag_educativos.segundoNombre, t_ag_educativos.primerApellido, t_ag_educativos.segundoApellido,t_ag_educativos.de partamento,t_ag_educativos.municipio,t_foro_respue stas.titulo,t_foro_respuestas.fechaRecibo,t_foro_r espuestas.id_respuesta

FROM `t_ag_educativos`,`t_foro_respuestas`
WHERE t_ag_educativos.noIdentidad = t_foro_respuestas.noIdentidad AND departamento='$departamento' AND fechaRecibo >='$desde1' AND fechaRecibo <='$hasta1'
)
UNION
(SELECT t_ag_orientadores.noIdentidad, t_ag_orientadores.primerNombre, t_ag_orientadores.segundoNombre, t_ag_orientadores.primerApellido, t_ag_orientadores.segundoApellido,t_ag_orientadore s.departamento,t_ag_orientadores.municipio,t_foro_ respuestas.titulo,t_foro_respuestas.fechaRecibo,t_ foro_respuestas.id_respuesta
FROM `t_ag_orientadores`,`t_foro_respuestas`
WHERE t_ag_orientadores.noIdentidad = t_foro_respuestas.noIdentidad AND departamento='$departamento'AND fechaRecibo >='$desde1' AND fechaRecibo <='$hasta1'
)
UNION
(SELECT t_ag_invitados.noIdentidad, t_ag_invitados.primerNombre, t_ag_invitados.segundoNombre, t_ag_invitados.primerApellido, t_ag_invitados.segundoApellido,t_ag_invitados.depa rtamento,t_ag_invitados.municipio,t_foro_respuesta s.titulo,t_foro_respuestas.fechaRecibo,t_foro_resp uestas.id_respuesta
FROM `t_ag_invitados`,`t_foro_respuestas`
WHERE t_ag_invitados.noIdentidad = t_foro_respuestas.noIdentidad AND departamento='$departamento' AND fechaRecibo >='$desde1' AND fechaRecibo <='$hasta1'
ORDER BY fechaRecibo desc)";

el campo fecha es el noveno en la ultima consulta
entonces pongo order by 9 y no funciona order by 9 desc tampoco no se si estoy entendiendo mal la respuesta
  #4 (permalink)  
Antiguo 21/05/2010, 08:46
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Consulta union de tres tablas y ordenar

Solo tu entiendes tu ejemplo. A lo que me refiero, es a que este orden si se puede dar por la posición de la columna.

Por ejemplo... tengo esta tabla en orden por defecto por id.

Código MySQL:
Ver original
  1. mysql> select id,codigo,modelo from productos;
  2. +----+----------+----------------------------------+
  3. | id | codigo   | modelo                           |
  4. +----+----------+----------------------------------+
  5. |  1 | AIPCIN   | PCI AIR LINK N                   |
  6. |  2 | DIR-615  | ROUTER D-LINK DIR-615            |
  7. |  3 | DWA-130N | ADAPTADOR USB D-LINK DWA-130 N   |
  8. |  4 | WBR-1310 | ROUTER D-LINK DIR-WBR-1310 / 300 |
  9. |  5 | NUVI350N | GARMIN NUVI 350 N                |
  10. |  6 | NUVI260  | GARMIN NUVI 260                  |
  11. |  7 | BEFSR41  | BEFSR41 ROUTER DSL LINKSYS CISCO |
  12. |  8 | WRT300N  | ROUTER LINKSYS WRT300N           |
  13. |  9 | WRT310N  | ROUTER WRT310N                   |
  14. | 10 | WRT150N  | ROUTER LINKSYS WRT150N           |
  15. | 11 | WRT160N  | ROUTER LINKSYS WRT160N           |
  16. | 12 | WRT54G2  | ROUTER LINKSYS WRT54G2           |
  17. | 13 | WUSB300N | ADAPTADOR LINKSYS WUSB300N       |
  18. | 14 | PCMCIAG  | PCMCIA LINKSYS G                 |
  19. +----+----------+----------------------------------+
  20. 14 rows in set (0.00 sec)

Si yo hago UNION con la misma tabla con los registros del 5 al 10, despues del 1 al 4 y por ultimo del 11 al 14 me aparece bien.

Código MySQL:
Ver original
  1. mysql> select id,codigo,modelo from productos where id between 5 and 10
  2.     -> union
  3.     -> select id,codigo,modelo from productos where id between 1 and 4
  4.     -> union
  5.     -> select id,codigo,modelo from productos where id between 11 and 14;
  6. +----+----------+----------------------------------+
  7. | id | codigo   | modelo                           |
  8. +----+----------+----------------------------------+
  9. |  5 | NUVI350N | GARMIN NUVI 350 N                |
  10. |  6 | NUVI260  | GARMIN NUVI 260                  |
  11. |  7 | BEFSR41  | BEFSR41 ROUTER DSL LINKSYS CISCO |
  12. |  8 | WRT300N  | ROUTER LINKSYS WRT300N           |
  13. |  9 | WRT310N  | ROUTER WRT310N                   |
  14. | 10 | WRT150N  | ROUTER LINKSYS WRT150N           |
  15. |  1 | AIPCIN   | PCI AIR LINK N                   |
  16. |  2 | DIR-615  | ROUTER D-LINK DIR-615            |
  17. |  3 | DWA-130N | ADAPTADOR USB D-LINK DWA-130 N   |
  18. |  4 | WBR-1310 | ROUTER D-LINK DIR-WBR-1310 / 300 |
  19. | 11 | WRT160N  | ROUTER LINKSYS WRT160N           |
  20. | 12 | WRT54G2  | ROUTER LINKSYS WRT54G2           |
  21. | 13 | WUSB300N | ADAPTADOR LINKSYS WUSB300N       |
  22. | 14 | PCMCIAG  | PCMCIA LINKSYS G                 |
  23. +----+----------+----------------------------------+
  24. 14 rows in set (0.00 sec)

Pero si a esta consulta le aplico un order by descendente por el primer campo (id en este caso) me lo hace bien.

Código MySQL:
Ver original
  1. mysql> select id,codigo,modelo from productos where id between 5 and 10
  2.     -> union
  3.     -> select id,codigo,modelo from productos where id between 1 and 4
  4.     -> union
  5.     -> select id,codigo,modelo from productos where id between 11 and 14
  6.     -> ORDER BY 1 DESC;
  7. +----+----------+----------------------------------+
  8. | id | codigo   | modelo                           |
  9. +----+----------+----------------------------------+
  10. | 14 | PCMCIAG  | PCMCIA LINKSYS G                 |
  11. | 13 | WUSB300N | ADAPTADOR LINKSYS WUSB300N       |
  12. | 12 | WRT54G2  | ROUTER LINKSYS WRT54G2           |
  13. | 11 | WRT160N  | ROUTER LINKSYS WRT160N           |
  14. | 10 | WRT150N  | ROUTER LINKSYS WRT150N           |
  15. |  9 | WRT310N  | ROUTER WRT310N                   |
  16. |  8 | WRT300N  | ROUTER LINKSYS WRT300N           |
  17. |  7 | BEFSR41  | BEFSR41 ROUTER DSL LINKSYS CISCO |
  18. |  6 | NUVI260  | GARMIN NUVI 260                  |
  19. |  5 | NUVI350N | GARMIN NUVI 350 N                |
  20. |  4 | WBR-1310 | ROUTER D-LINK DIR-WBR-1310 / 300 |
  21. |  3 | DWA-130N | ADAPTADOR USB D-LINK DWA-130 N   |
  22. |  2 | DIR-615  | ROUTER D-LINK DIR-615            |
  23. |  1 | AIPCIN   | PCI AIR LINK N                   |
  24. +----+----------+----------------------------------+
  25. 14 rows in set (0.00 sec)

analiza el ejemplo y acomodalo a tus necesidades.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 02/06/2010, 10:34
 
Fecha de Ingreso: octubre-2009
Mensajes: 68
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: Consulta union de tres tablas y ordenar

no pude ordenar los registros no me toma la linea de ordenar y ahora necesito aparte de ordenarlos limitarlos para paginar alguna otra idea


(SELECTcampo1,campo2,campofecha

FROM `tabla1`,`tabla2`

WHERE condicion1)

UNION

(SELECTcampo1,campo2,campofecha

FROM `tabla1`,`tabla2`

WHERE condicion2)

UNION

(SELECTcampo1,campo2,campofecha

FROM `tabla1`,`tabla2`

WHERE condicion3 ORDER BY campofecha DESC LIMIT $inicio, $registros)

gracias
  #6 (permalink)  
Antiguo 04/06/2010, 04:31
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Consulta union de tres tablas y ordenar

Buenas:

Prueba lo siguiente:

Código MySQL:
Ver original
  1. SELECT campo1,campo2,campofecha
  2.  
  3. (
  4. SELECT campo1,campo2,campofecha
  5. FROM `tabla1`,`tabla2`
  6. WHERE condicion1
  7.  
  8.  
  9. SELECT campo1,campo2,campofecha
  10. FROM `tabla1`,`tabla2`
  11. WHERE condicion2
  12.  
  13.  
  14. SELECT campo1,campo2,campofecha
  15. FROM `tabla1`,`tabla2`
  16. WHERE condicion3
  17. ) t
  18.  
  19. ORDER BY campofecha DESC LIMIT $inicio, $registros
  #7 (permalink)  
Antiguo 04/06/2010, 04:34
 
Fecha de Ingreso: noviembre-2007
Mensajes: 154
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Consulta union de tres tablas y ordenar

Perdonar las 'ediciones', pero en el curro, con el proxy y los jefes, el primer vistazo ha sido muy poco detallado :-p

Etiquetas: tablas, tres, union
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 01:34.