Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] - sortowanie wg. daty i czasu
Forum PHP.pl > Forum > Przedszkole
konrados
No nie działa. Mam tabelę z listą użytkowników, w niej między innymi "login", "email" parę innych oraz "regdt" typu DATETIME - data i czas rejestracji.

Mam taką funkcję:

CODE

function WUserGetList($orderby="regdt",$orderDirection="DESC"){
$arRet=array();
//jedziemy przez wszystkich zarej. userów
$result=mysql_query("SELECT * FROM users ORDER BY $orderby $orderDirection") or die(mysql_error());

//dalej wypełniam array do zwrócenia, ale to nie ma znaczenia - w $result nic nie ma w pewnych okolicznościach o czym poniżej

};


Działa tylko gdy zapodam inne pole w $orderby (np. "email"),
lub gdy zapodam "regdt" ale z "ASC" w $orderDirection.

Tak więc to działa ok:
WUserGetList("regdt","ASC");

podobnie jak i to działa ok:
WUserGetList("email","DESC");

Natomiast gdy zapodam "regdt" i "DESC", nie działa - nie wyrzuca żadnego błędu, ale też i nic nie zwraca ($result ma zerową wielkość).

Tak więc to nie działa:
WUserGetList("regdt","DESC");

Czy istnieje jakiś znany problem z sortowaniem wg. DATETIME ? A może jakiś inny błąd popełniam?
Wieviór
Tak tylko dla estetyki:

  1. <?php
  2. $result=mysql_query("SELECT * FROM users ORDER BY '".$orderby."' ".$orderDirection) or die(mysql_error());
  3. ?>


Zobacz zresztą, może to coś poprawi.
konrados
Dzięki, ale nie, nie rozwiązało problemu. Masz jakieś inne koncepcje?

p.s. To też próbowałem i też nie pomogło:

CODE
$result=mysql_query("SELECT * FROM users ORDER BY '$orderby' '$orderDirection'") or die(mysql_error());


Ogółem wychodzi wszystko poza jednym: sortowanie malejące wg. regdt (DATETIME), może to jakiś bug w mysql'u ?

hmm, to jest coraz dziwniejsze. W owej tabeli mam jeszcze jedno pole typu DATETIME ("dtLastNotify") - i przy użyciu tego pola wszystko działa ok. w obu kierunkach ("DESC" i "ASC").
Wieviór
Zmień nazwę pola regdt w tabeli i w zapytaniu i zobacz ;]
konrados
Zmieniłem - bez rezultatu.
Natomiast, znudzony już, parę razy nacisnąłem F5 by odświeżyć i... raz wyszło - następnym razem już nie.

Zgłosiłbym to do mojego providera gdyby nie to że phpMyAdmin działa OK (również gdy sortowanie wg. problematycznego pola), podobnie działają OK wszystkie inne skrypty na mojej stronie (w tym np. pphpbb czy wikimedia). No po prostu moje jak zwykle nie działa sad.gif

Może jak jutro na to spojrzę to znajdę jakiś błąd. A może jest jakiś sposób by mysql'owi powiedzieć, że ma być bardziej wrażliwy na błędy/bardziej spostrzegawczy i bardziej wymowny w swoich problemach?
nevt
możliwy jest jeszcze jeden powód - jeżeli danych w bazie jest b. dużo, a na polu regdt nie ma założonego indeksu, to zapytanie może wykonywać się zbyt długo i dlatego (przy krótkich limitach czasu dla serwera) nic nie zwraca....
konrados
Nie, to też nie - jedyni zarejestrowani użytkownicy to ja:) I jest mnie co najwyżej sześciu. To skrypt testowy jest.

Na razie po prostu przestałem sortować wg. daty/czasu w trybie DESC. Myślę, że jednak to jest błąd mysql'a - zamiast zapodać mi jakiś błąd on po prostu nic nie robi. Być może w jednym z rekordów coś mu się nie podoba i strajkuje.
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.