Zamów tabelę MySQL według dwóch kolumn
Jak posortować tabelę MySQL według dwóch kolumn?
To, czego chcę, to artykuły posortowane najpierw według najwyższych ocen, a następnie ostatniej daty. Jako przykład, będzie to Przykładowe wyjście (Lewy # to ocena, następnie tytuł artykułu, a następnie Data artykułu)
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
Odpowiedni SQL, którego używam to:
ORDER BY article_rating, article_time DESC
Mogę sortować po jednym lub drugim, ale nie po obu. 5 answers
Domyślne sortowanie jest rosnąco, musisz dodać słowo kluczowe DESC do obu zamówień:
ORDER BY article_rating DESC, article_time DESC
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 07:51:35
ORDER BY article_rating, article_time DESC
Będzie sortować według article_time tylko wtedy, gdy są dwa artykuły o tej samej ocenie. Z tego, co widzę w twoim przykładzie, dokładnie tak się dzieje.
↓ 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.
Ale rozważ:
↓ 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-05 07:55:05
ORDER BY article_rating ASC , article_time DESC
DESC
na końcu posortuje po obu kolumnach malejących. Musisz podać ASC
jeśli chcesz to inaczej
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-21 10:19:24
To może pomóc komuś, kto szuka sposobu sortowania tabeli po dwóch kolumnach, ale w paralelowy sposób. Oznacza to połączenie dwóch sortów za pomocą funkcji sortowania zbiorczego. Jest to bardzo przydatne na przykład podczas pobierania artykułów za pomocą wyszukiwania pełnotekstowego, a także w przypadku daty publikacji artykułu.
To tylko przykład, ale jeśli złapiesz pomysł, możesz znaleźć wiele zagregowanych funkcji do użycia. Możesz nawet ważyć kolumny, aby preferować jedną nad drugą. Moja funkcja zajmuje skrajności z obu rodzajów, a więc najbardziej cenione wiersze znajdują się na górze.
Sorry jeśli istnieją prostsze rozwiązania do tej pracy, ale nie znalazłem żadnych.
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-20 09:19:12
Poniżej zostaną uporządkowane dane w zależności od obu kolumn w porządku malejącym.
ORDER BY article_rating DESC, article_time DESC
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 19:21:35