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

Order by en Union

Estas en el tema de Order by en Union en el foro de Mysql en Foros del Web. Hola a todos Tengo la siguiente consulta.. Código: select ID_ARTICULO , substr(NOMBRE,1, 50) , substr( ARTICULO , 1, 50) , MATCH(NOMBRE, ARTICULO) AGAINST('encomillada') as PUNTUACION ...
  #1 (permalink)  
Antiguo 06/02/2006, 18:18
 
Fecha de Ingreso: octubre-2004
Mensajes: 143
Antigüedad: 19 años, 6 meses
Puntos: 0
Order by en Union

Hola a todos

Tengo la siguiente consulta..
Código:
select ID_ARTICULO , substr(NOMBRE,1, 50) , substr( ARTICULO , 1, 50) , MATCH(NOMBRE, ARTICULO) AGAINST('encomillada') as PUNTUACION
  FROM ARTICULO 
  WHERE MATCH(NOMBRE, ARTICULO) AGAINST('encomillada') 
union 
select ID_ARTICULO,substr(NOMBRE,1, 50) , substr( ARTICULO , 1, 50), MATCH(NOMBRE, ARTICULO) AGAINST('ordinario') as PUNTUACION
  from ARTICULO 
  WHERE MATCH(NOMBRE, ARTICULO) AGAINST('ordinario');
Si observan es una consulta bastante simple.. La gracia de esta query es que el ultimo campo (PUNTUACION) obtiene un valor que entrega MySql de la busqueda de texto, dependiendo de la coincidencia del texto con la busqueda...

Cual es la duda... no se como se podria hacer para ordenar por esa columna.. para que quede claro les muestro el resultado de esta consulta ,m en una base de dadtos deprueba

Código:
+-------------+----------------------+----------------------+------------------+
| ID_ARTICULO | NOMBRE               | ARTICULO             | PUNTUACION       |
+-------------+----------------------+----------------------+------------------+
|         773 | http://www.calendarz | fortaleza". -La | 3.34951519966125 |
|         239 | fortaleza". -La | 13. ¿Pens&aac | 2.60608053207397 |
|         486 | de ver que todos san | ordinario, a lo que  | 2.56099152565002 |
|         958 | ruin; alguna cosilla | La Perfección | 2.96867966651917 |
|         967 | 11. Estos efectos qu | nos pudiese traer 20 | 2.77129721641541 |
|         930 | archivo forma una fr | pide de ruin; alguna | 2.70388054847717 |
|          40 | ordinario, a lo que  | medio, porque dejar  | 2.61757683753967 |
|          25 | 2. Pues mirad, herma | Una cuestión  | 2.19701933860779 |
|         537 | 1 Alusión a l | Son frecuentes los j | 2.17116975784302 |
|         464 | María andan j | ordinario, a lo que  | 2.16786789894104 |
|          73 | querer tan ruin como | la política y |   2.107008934021 |
|         486 | de ver que todos san | ordinario, a lo que  | 1.90976810455322 |
|         885 | cuento y las grandes | este número 8 |  1.7974556684494 |
|         443 | 7 La 1ª redacci | ruin; alguna cosilla | 1.74632930755615 |
|         624 | ordinario, a lo que  | querer tan ruin como |  1.7304915189743 |
|         253 | socialización | si con los ojos corp | 1.67514324188232 |
+-------------+----------------------+----------------------+------------------+
16 rows in set (0.02 sec)
Si se fijan la columna PUNTUACION, no esta ordenada, que es lo que no se como hacer, para que considere el resultado de toda la columna y no por consultas separadas.. se entiende ???

Bueno, espero sus comentaros

Saludos
  #2 (permalink)  
Antiguo 07/02/2006, 02:58
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Agregale un order by puntucacion al final :
Código:
select ID_ARTICULO , substr(NOMBRE,1, 50) , substr( ARTICULO , 1, 50) , MATCH(NOMBRE, ARTICULO) AGAINST('encomillada') as PUNTUACION
  FROM ARTICULO 
  WHERE MATCH(NOMBRE, ARTICULO) AGAINST('encomillada') 
union 
select ID_ARTICULO,substr(NOMBRE,1, 50) , substr( ARTICULO , 1, 50), MATCH(NOMBRE, ARTICULO) AGAINST('ordinario') as PUNTUACION
  from ARTICULO 
  WHERE MATCH(NOMBRE, ARTICULO) AGAINST('ordinario')
ORDER BY PUNTUACION DESC
  #3 (permalink)  
Antiguo 07/02/2006, 06:08
 
Fecha de Ingreso: octubre-2004
Mensajes: 143
Antigüedad: 19 años, 6 meses
Puntos: 0
SISISISI

Si funciono

Gracias !!!!!
  #4 (permalink)  
Antiguo 15/10/2006, 15:28
 
Fecha de Ingreso: mayo-2005
Mensajes: 55
Antigüedad: 18 años, 10 meses
Puntos: 1
¡¡¡A mi no me funcionó!!!

Mi QUERY es el siguiente:

(SELECT p.IDproduccion, p.titulo, p.IDcategoria, p.informacion,
i.IDproduccion, i.IDartista,
a.IDartista, a.Nombre
FROM produccion p, interprete i, artista a
WHERE (i.IDproduccion=p.IDproduccion AND a.IDartista=i.IDartista) AND
(p.informacion like '%$p_search_g%' OR p.titulo like '%$p_search_g%'
OR a.Nombre like '%$p_search_g%'))

UNION

(SELECT p.IDproduccion, p.titulo, p.IDcategoria, p.informacion,
pda.IDproduccion, pda.IDproductor,
pr.IDproductor, pr.productor
FROM produccion p, producida pda, productor pr
WHERE (pda.IDproduccion=p.IDproduccion AND pda.IDproductor=pr.IDproductor) AND
(pr.productor like '%$p_search_g%'))

UNION

(SELECT p.IDproduccion, p.titulo, p.IDcategoria, p.informacion,
cta.IDproduccion, cta.IDcompositor,
c.IDcompositor, c.Apellido
FROM produccion p, compuesta cta, compositor c
WHERE (cta.IDproduccion=p.IDproduccion AND cta.IDcompositor=c.IDcompositor) AND
(c.Apellido like '%$p_search_g%' OR c.Nombre like '%$p_search_g%'))
ORDER BY p.IDproduccion

Pero no funcionó! Tengo el MySQL 4.0.25, ¿será un problema de incompactibilidad?

Por cierto, tampoco suprime las filas duplicadas.

Última edición por latin.developer; 15/10/2006 a las 15:38
  #5 (permalink)  
Antiguo 16/10/2006, 00:26
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Cuando dices que no funcionó, ¿te refieres a que te da error o a que no te ordena?

A primera vista la consulta al ORDER BY, le sobra el p., sería ORDER BY IDproduccion. Por la versión, creo, que debería funcionar sin problemas.

Lo de las filas duplicadas, es normal que te las muestre, ya que, en ningún sitio está diciendo que no lo haga, es decir, por ejemplo, si tienes una producción, donde el apellido del compositor cumple p_search_g, el productor también lo cumple y el titulo también, te la mostrará 3 veces.
  #6 (permalink)  
Antiguo 26/10/2009, 13:43
 
Fecha de Ingreso: octubre-2009
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Order by en Union

En las consultas con Union solo puede emplearse el order by unido a un limit.

Como no tengo antigüedad no puedo incluir el enlace, pero buscando en Google por order y union mysql aparece como primera opción.

Cita del manual Mysql:

SELECT:

(SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM tbl_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

Los ORDER BY para comandos SELECT individuales entre paréntesis tienen efecto sólo al combinarlos con LIMIT. De otro modo, el ORDER BY se optimiza a parte.
  #7 (permalink)  
Antiguo 26/10/2009, 14:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Order by en Union

elucubracion: No resucites posts viejos: Ese post tiene TRES años.

.. Además UNION sólo requiere que el SELECT tenga la misma cantidad de campos... No requiere ni GROUP BY ni LIMIT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 08:59.