Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Sortowanie według dwóch pól
arkos
post 27.11.2011, 19:28:04
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


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!

Ten post edytował arkos 27.11.2011, 19:57:03
Go to the top of the page
+Quote Post
arzach
post 27.11.2011, 19:57:11
Post #2





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


Kod
ORDER BY data_dodania DESC, id DESC
Go to the top of the page
+Quote Post
arkos
post 27.11.2011, 19:59:21
Post #3





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


Nic nie pomogło sad.gif
Go to the top of the page
+Quote Post
arzach
post 27.11.2011, 20:05:02
Post #4





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


data_dodania wartości masz w bazie jako typ datetime questionmark.gifquestionmark.gif
Go to the top of the page
+Quote Post
arkos
post 27.11.2011, 20:06:40
Post #5





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


Nie, varchar
Go to the top of the page
+Quote Post
arzach
post 27.11.2011, 20:08:41
Post #6





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
arkos
post 27.11.2011, 20:53:17
Post #7





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


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

Ten post edytował arkos 27.11.2011, 20:59:23
Go to the top of the page
+Quote Post
Kostek.88
post 27.11.2011, 22:39:32
Post #8





Grupa: Zarejestrowani
Postów: 376
Pomógł: 47
Dołączył: 23.08.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
szmerak
post 28.11.2011, 05:28:20
Post #9





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

Ostrzeżenie: (0%)
-----


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...

Ten post edytował szmerak 28.11.2011, 05:28:43
Go to the top of the page
+Quote Post
toaspzoo
post 28.11.2011, 08:03:35
Post #10





Grupa: Zarejestrowani
Postów: 778
Pomógł: 84
Dołączył: 29.07.2010
Skąd: Gliwice / Pławniowice Mistrz niezmordowanej klawiatury.

Ostrzeżenie: (20%)
X----


  1. ORDER BY `id`, `data_dodania`;


--------------------

LS Easter egg <
Go to the top of the page
+Quote Post
arkos
post 28.11.2011, 14:39:35
Post #11





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


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 |


Ten post edytował arkos 28.11.2011, 14:42:07
Go to the top of the page
+Quote Post
luckyps
post 28.11.2011, 14:45:06
Post #12





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
arkos
post 28.11.2011, 14:48:46
Post #13





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


Tak, więc w jaki sposób/zapytaniem mogę osiągnąć wynik taki jak mnie interesuje?
Go to the top of the page
+Quote Post
luckyps
post 28.11.2011, 14:56:34
Post #14





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


  1. SELECT * FROM tabela ORDER BY year(date_create) DESC, id DESC
Go to the top of the page
+Quote Post
arkos
post 28.11.2011, 15:02:14
Post #15





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 24.12.2009

Ostrzeżenie: (20%)
X----


Działa jak należy, dzięki smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 18:16