Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] - sortowanie wg. daty i czasu, nie działa SORT BY gdy wg. pola typu DATETIME
konrados
post
Post #1





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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?
Go to the top of the page
+Quote Post
-Wieviór-
post
Post #2





Goście







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.
Go to the top of the page
+Quote Post
konrados
post
Post #3





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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").
Go to the top of the page
+Quote Post
-Wieviór-
post
Post #4





Goście







Zmień nazwę pola regdt w tabeli i w zapytaniu i zobacz ;]
Go to the top of the page
+Quote Post
konrados
post
Post #5





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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?

Ten post edytował konrados 8.02.2008, 21:08:13
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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


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

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
konrados
post
Post #7





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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.
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 Aktualny czas: 21.08.2025 - 23:31