tabla - PHP MySQL orden por dos columnas
php conexion mysql (5)
¿Cómo ordeno una tabla MySQL por dos columnas?
Lo que quiero son artículos clasificados por las calificaciones más altas primero, luego la más reciente. Como ejemplo, esto sería un resultado de muestra (el # a la izquierda es la calificación, luego el título del artículo, luego la fecha del artículo)
50 | This article rocks | Feb 4, 2009 35 | This article is pretty good | Feb 1, 2009 5 | This Article isn''t so hot | Jan 25, 2009
El SQL relevante que estoy usando es:
ORDER BY article_rating, article_time DESC
Puedo ordenar por uno u otro, pero no ambos.
Esto tal vez ayude a alguien que está buscando la manera de ordenar la tabla por dos columnas, pero de manera paralela. Esto significa combinar dos géneros usando la función de clasificación agregada. Es muy útil cuando, por ejemplo, recupera artículos que utilizan la búsqueda de texto completo y también en relación con la fecha de publicación del artículo.
Este es solo un ejemplo, pero si capta la idea, puede encontrar muchas funciones agregadas para usar. Incluso puede ponderar las columnas para preferir uno por segundo. La función mía toma extremos de ambos tipos, por lo tanto, las filas más valoradas están en la parte superior.
Disculpe si existen soluciones simplier para hacer este trabajo, pero no he encontrado ninguno.
SELECT
`id`,
`text`,
`date`
FROM
(
SELECT
k.`id`,
k.`text`,
k.`date`,
k.`match_order_id`,
@row := @row + 1 as `date_order_id`
FROM
(
SELECT
t.`id`,
t.`text`,
t.`date`,
@row := @row + 1 as `match_order_id`
FROM
(
SELECT
`art_id` AS `id`,
`text` AS `text`,
`date` AS `date`,
MATCH (`text`) AGAINST (:string) AS `match`
FROM int_art_fulltext
WHERE MATCH (`text`) AGAINST (:string IN BOOLEAN MODE)
LIMIT 0,101
) t,
(
SELECT @row := 0
) r
ORDER BY `match` DESC
) k,
(
SELECT @row := 0
) l
ORDER BY k.`date` DESC
) s
ORDER BY (1/`match_order_id`+1/`date_order_id`) DESC
La clasificación predeterminada es ascendente, debe agregar la palabra clave DESC a sus dos órdenes:
ORDER BY article_rating DESC, article_time DESC
Lo siguiente ordenará sus datos dependiendo de ambas columnas en orden descendente.
ORDER BY article_rating DESC, article_time DESC
ORDER BY article_rating ASC , article_time DESC
DESC
al final ordenará por ambas columnas descendentes. ASC
especificar ASC
si lo desea de otra manera
ORDER BY article_rating, article_time DESC
clasificará por article_time solo si hay dos artículos con la misma calificación. De todo lo que puedo ver en tu ejemplo, esto es exactamente lo que sucede.
↓ primary sort secondary sort ↓
1. 50 | This article rocks | Feb 4, 2009 3.
2. 35 | This article is pretty good | Feb 1, 2009 2.
3. 5 | This Article isn''t so hot | Jan 25, 2009 1.
pero considera:
↓ primary sort secondary sort ↓
1. 50 | This article rocks | Feb 2, 2009 3.
1. 50 | This article rocks, too | Feb 4, 2009 4.
2. 35 | This article is pretty good | Feb 1, 2009 2.
3. 5 | This Article isn''t so hot | Jan 25, 2009 1.