Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORDER BY nic DESC
Forum PHP.pl > Forum > Bazy danych > MySQL
kamiz
Chodzi o to, aby segregować według czasu dodania rekordu do bazy (czyli domyślnie), tyle że w przeciwnym kierunku. Da się to zrobić?
hwao
Pobieramy dane z bazy danych, jako tablica wielowymiarowa:
  1. function query( $sSql ) {
  2. $aData = array();
  3.  
  4. $rQuery = mysql_query( $sSql );
  5.  
  6. if( $rQuery != false ) {
  7. while( $aRow = mysql_fetch_assoc( $rQuery ) ) {
  8. $aData[] = $aRow;
  9. }
  10.  
  11. return $aData;
  12. }/* else {
  13.   echo '<p>'.$sSql.'</p>';
  14.   echo '<p style="color: red">'.mysql_error().'</p>';
  15.   }*/
  16. }


Następnie stosujemy array_multisort() jeżeli nie mamy wyników posortowanych po dacie. Jeżeli mamy to wystarczy array_reverse()

  1. $aPosortowanaPoDacie = query( 'Select ...' );
  2. $aPosorowanePoDacieOdwrotnie = array_reverse( $aPosortowanaPoDacie );

kamiz
Wiem ofc jak to zrobić przez PHP, ale nie wiedziałem czy można to uprościć za pomocą MySQL. Jeśli się nie da, to trudno.
hwao
Podobno jeszcze da się przy pomocy SQL :-)

http://webmade.org/kursy-online/sortowanie...-kurs-mysql.php
Mchl
A masz kolumnę z czasem dodania do bazy?
kamiz
Cytat
A masz kolumnę z czasem dodania do bazy?

Mam, ale czasy aktualizuję, a kolejności tym samym nie chcę zmieniać.

Cytat
Podobno jeszcze da się przy pomocy SQL :-)

Niby jak?
blooregard
~kamiz, no to daj dwie kolumny: z czasem dodania (tylko w celu sortowania), oraz z czasem modyfikacji
Mchl
Jak nie masz czasu dodania, to nie masz po czym sortować. Równie dobrze mógłbyś sortować książkę telefoniczną po dacie urodzenia abonenta.
blooregard
Zaraz, moment.
A masz jakiś klucz głowny tabeli, typu INT i autoinkrementowany?
Przecież po nim możesz sortować w dowolną stronę.
kamiz
Cytat
~kamiz, no to daj dwie kolumny: z czasem dodania (tylko w celu sortowania), oraz z czasem modyfikacji

Zrobiłbym tak, tyle że moja strona już działała wcześniej, a backupy zacząłem robić później - nie mam oryginalnego czasu dodania, a nie chcę zmyślać

Cytat
Zaraz, moment.
A masz jakiś klucz głowny tabeli, typu INT i autoinkrementowany?
Przecież po nim możesz sortować w dowolną stronę.

Właśnie chodzi o to, że wprowadzam przyjazne linki. Zamieniam id z liczby na ciąg, bo nie widzę sensu dodawania kolejnej kolumny do tabeli, gdy mogę to zrobić za pomocą PHP.
Co do auto_increment, to po kilku zmianach w bazie danych numerki zaczęły świrować, więc wprowadzam je ręcznie (żaden problem, jedynym adminem strony jestem ja).
icetique
Haha. biggrin.gif

To nie był najlepszy pomysł, żeby id w bazie zmieniać na tekst (jeśli dobrze rozumiem).

Za to nie rozumiem w jaki sposób auto-increment zaczął Ci świrować. Może go do końca nie rozumiesz?
Mchl
Cytat(blooregard @ 27.03.2010, 20:31:34 ) *
Zaraz, moment.
A masz jakiś klucz głowny tabeli, typu INT i autoinkrementowany?
Przecież po nim możesz sortować w dowolną stronę.


Najczęściej rzeczywiście, im większy AUTO_INCREMENT, tym poźniej rekord trafił do tabeli. Jednak nie zawsze tak jest i warto o tym pamiętać.

Dwa przypadki:
1. Dwie transakcje A i B wstawiające rekordy do tabeli. A zaczyna się przed B, ale B kończy się przed A.
2. Replikacja multimaster. Np dwa serwery, jeden wstawia AUTO_INCREMENT parzyste, drugi nieparzyste ( http://dev.mysql.com/doc/refman/5.1/en/rep...ement_increment ).


kamiz
Cytat
To nie był najlepszy pomysł, żeby id w bazie zmieniać na tekst (jeśli dobrze rozumiem).

Dlaczego?
Cytat
Za to nie rozumiem w jaki sposób auto-increment zaczął Ci świrować. Może go do końca nie rozumiesz?

Wynika to z tego, że usunąłem rekord, dodałem go na nowo, a auto_increment przydzielił id tak jakbym nie usuwał rekordu. Kij z tym, ręcznie mogę wpisać.
Mchl
Cytat(kamiz @ 27.03.2010, 21:17:56 ) *
Wynika to z tego, że usunąłem rekord, dodałem go na nowo, a auto_increment przydzielił id tak jakbym nie usuwał rekordu. Kij z tym, ręcznie mogę wpisać.


Czyli nie użył ID tego który usunąłeś, tylko wstawił kolejny większy od poprzedniego? Tak właśnie to ma działać.
kamiz
Cytat(Mchl @ 27.03.2010, 21:19:57 ) *
Czyli nie użył ID tego który usunąłeś, tylko wstawił kolejny większy od poprzedniego? Tak właśnie to ma działać.

Dokładnie.
Mchl
I dlaczego niby uważasz to za świrowanie? Tak ma być, bo 'łatanie dziur' nie ma sensu. Pamiętaj, ten numerek jest dla komputera, a nie dla użytkownika, więc nie ma się co przejmować, czy w numeracji są luki, czy nie.
kamiz
Cytat(Mchl @ 27.03.2010, 21:27:52 ) *
I dlaczego niby uważasz to za świrowanie? Tak ma być, bo 'łatanie dziur' nie ma sensu. Pamiętaj, ten numerek jest dla komputera, a nie dla użytkownika, więc nie ma się co przejmować, czy w numeracji są luki, czy nie.

OMG, a wy dalej o tym auto_increment. Wiem, że tak ma być, funkcja dobrze działa. Nie będę się tłumaczyć, dlaczego wolę wprowadzać ręcznie. Koniec tematu.
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.