una tabla registros paso para mostrar insertar formulario desde datos crear conexion conectar con como codigo buscar archivo php mysql sql-order-by

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.