Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sortowanie według dwóch pól
Forum PHP.pl > Forum > Przedszkole
arkos
W jaki sposób mogę posortować sobie rekordy według dwóch kolumn?
Chodzi mi, aby sortowało na początku według jednej, a później posortowało według drugiej.

Mam taką tabelę:
Cytat
| data_dodania | id |
| 27.11.2011 18:03 | 1 |
| 27.11.2011 19:08 | 2 |

Ustawiałem w taki sposób:
  1. SELECT * FROM `tabela` ORDER BY data_dodania, id DESC

Powinno wyświetlić rekord ten o ID 2 jako pierwszy, a wyświetla jako drugi.

Co robię źle, w jaki sposób mogę uzyskać poprawny rezultat?

Chciałbym uzyskać mając, np. takie wartości:
  1. | data_dodania | id |
  2. | 13.09.2011 14:41 | 3 |
  3. | 21.12.2012 05:04 | 4 |
  4. | 27.11.2011 18:00 | 1 |
  5. | 20.04.2011 17:55 | 4 |
  6. | 11.11.2011 02:29 | 5 |
  7. | 17.07.2012 10:03 | 2 |
  8. | 25.12.2011 11:39 | 2 |
  9. | 03.01.2012 08:18 | 1 |
  10. | 25.04.2012 23:59 | 3 |

Rezultat chciałbym taki:
Cytat
| data_dodania | id |
| 21.12.2012 05:04 | 4 |
| 25.04.2012 23:59 | 3 |
| 17.07.2012 10:03 | 2 |
| 03.01.2012 08:18 | 1 |
| 11.11.2011 02:29 | 5 |
| 20.04.2011 17:55 | 4 |
| 13.09.2011 14:41 | 3 |
| 25.12.2011 11:39 | 2 |
| 27.11.2011 18:00 | 1 |

Z góry dziękuję za odpowiedzi smile.gif
Pozdrawiam!
arzach
Kod
ORDER BY data_dodania DESC, id DESC
arkos
Nic nie pomogło sad.gif
arzach
data_dodania wartości masz w bazie jako typ datetime questionmark.gifquestionmark.gif
arkos
Nie, varchar
arzach
To już masz odpowiedz czemu nie działa i nie ma co się dziwić że źle sortuje. Daty się trzyma jako typ date albo datetime
arkos
Ok, pozmieniam i dam znać czy zadziała.
PS. Tworzyłem jako tekst ponieważ nie chciałem później już zmieniać jej formatu.

Nie sortuje :/
data_dodania: datetime
id: float
Kostek.88
Cytat
PS. Tworzyłem jako tekst ponieważ nie chciałem później już zmieniać jej formatu.

Co masz na mysli?


Cytat
Nie sortuje :/
data_dodania: datetime
id: float

Podaj kawalek kodu PHP+MySQL i dlaczego id nie masz jako INT?
szmerak
Cytat(arzach @ 27.11.2011, 20:08:41 ) *
To już masz odpowiedz czemu nie działa i nie ma co się dziwić że źle sortuje. Daty się trzyma jako typ date albo datetime


Ja tam zawsze trzymam jako timestamp(int), tak więc nigdy nie mam problemów z sortowaniem...
toaspzoo
  1. ORDER BY `id`, `data_dodania`;
arkos
Nie działają Wasze rozwiązania. Udowodnienie:
  1. CREATE TABLE IF NOT EXISTS `tabela` (
  2. `id` int(11) NOT NULL,
  3. `date_create` datetime NOT NULL
  4. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  5.  
  6. INSERT INTO `tabela` (`id`, `date_create`) VALUES
  7. (3, '2011-09-13 14:41:00'),
  8. (4, '2012-12-21 05:04:00'),
  9. (1, '2011-11-27 18:00:00'),
  10. (4, '2011-04-20 17:55:00'),
  11. (5, '2011-11-11 02:29:00'),
  12. (2, '2012-07-17 10:03:00'),
  13. (2, '2011-12-25 11:39:00'),
  14. (1, '2012-01-03 08:18:00'),
  15. (3, '2012-04-25 23:59:00');


Zapytanie:
  1. SELECT * FROM `tabela` ORDER BY `date_create` DESC, `id` DESC


Wynik:
Cytat
| id | date_create |
| 4 | 2012-12-21 05:04:00 |
| 2 | 2012-07-17 10:03:00 |
| 3 | 2012-04-25 23:59:00 |
| 1 | 2012-01-03 08:18:00 |
| 2 | 2011-12-25 11:39:00 |
| 1 | 2011-11-27 18:00:00 |
| 5 | 2011-11-11 02:29:00 |
| 3 | 2011-09-13 14:41:00 |
| 4 | 2011-04-20 17:55:00 |


Wynik jaki powinien być:
Cytat
| id | date_create |
| 4 | 21.12.2012 05:04:00 |
| 3 | 25.04.2012 23:59:00 |
| 2 | 17.07.2012 10:03:00 |
| 1 | 03.01.2012 08:18:00 |
| 5 | 11.11.2011 02:29:00 |
| 4 | 20.04.2011 17:55:00 |
| 3 | 13.09.2011 14:41:00 |
| 2 | 25.12.2011 11:39:00 |
| 1 | 27.11.2011 18:00:00 |
luckyps
Wyniki zwracane przez zapytanie są ok.

Sortujesz po dacie od najnowszej.... pozniej id... jesli napotkasz na identyczna date to dopiero wtedy bedzie brane pod uwage sortowanie po id... inaczej bedzie tylko sort po dacie.
arkos
Tak, więc w jaki sposób/zapytaniem mogę osiągnąć wynik taki jak mnie interesuje?
luckyps
  1. SELECT * FROM tabela ORDER BY year(date_create) DESC, id DESC
arkos
Działa jak należy, dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.