Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Sortowanie
Forum PHP.pl > Forum > Przedszkole
XvAK
Witam

Mam problem z sortowaniem, ponieważ musi się odbyć ono na zasadzie, że ORDER BY będzie obowiązywać dla wiersza z większą datą. Skrypt aktualnie wygląda tak (wycinek):

  1. $mysql->query("SELECT `WaznyDo1`,`Godzina1`,`WaznyDo2`,`Godzina2`,`WaznyDo3`,`Godzina3` FROM `sh_lista` ORDER BY `WaznyDo1`,`Godzina1` ASC;");
  2. while ($wiersz = mysql_fetch_array($result))
  3. {
  4. $waznydo1 = $wiersz[0];
  5. $godzina1 = $wiersz[1];
  6. $waznydo2 = $wiersz[2];
  7. $godzina2 = $wiersz[3];
  8. $waznydo3 = $wiersz[4];
  9. $godzina3 = $wiersz[5];
  10.  
  11. // dalsza część skryptu wyświetlająca dane w sposób mniej więcej taki:
  12.  
  13. if(!empty($waznydo1)) {echo "$waznydo1 $godzina1";}
  14. if(!empty($waznydo2)) {echo "$waznydo2 $godzina2";}
  15. if(!empty($waznydo3)) {echo "$waznydo3 $godzina3";}
  16. }


Wygląda to mniej więcej tak (na czerwono oddzieliłem 'wyniki działań 1 zapętlenia')


Zmienienie zapytania (końcówki) z ORDER BY `WaznyDo1`,`Godzina1` ASC; na ORDER BY `WaznyDo1`,`Godzina1`,`WaznyDo2`,`Godzina2`,`WaznyDo3`,`Godzina3` ASC; niewiele zmienia


Nie miałbym problemów z sortowaniem gdyby daty i godziny były w 1 tabeli, ale problem jest że są w 3 rożnych.

Najprostszym rozwiązaniem byłoby połączenie tych 3 kolumn i wtedy posortować ale lecz musza być one osobno więc to nie wypali.
Można je jakoś tymczasowo połączyć tylko na czas sortowania lub jakoś inaczej to rozwiązać?


Tak aby wynik wyglądał w ten sposób:


Z góry dzięki za pomoc.
XvAK
Dalej nie potrafię napisać zapytania w ten sposób aby wyniki były sortowane po najniższej dacie z pośród 6 różnych pól (WaznyDo1 + Godzina1 LUB WaznyDo2 + Godzina2 LUB WaznyDo3 + Godzina3)
Daimos
Po pierwsze, nie rozumiem dlaczego w oddzielnych kolumnach trzymasz datę i godzinę, do tego jest TIMESTAMP i DATETIME. Wtedy łączysz tabelę i sortujesz po całej dacie, a nie jakieś magiczne cuda z sortowaniem godziny i daty jednocześnie smile.gif
XvAK
Cytat(my salsa @ 24.10.2010, 17:09:23 ) *
Po pierwsze, nie rozumiem dlaczego w oddzielnych kolumnach trzymasz datę i godzinę, do tego jest TIMESTAMP i DATETIME. Wtedy łączysz tabelę i sortujesz po całej dacie, a nie jakieś magiczne cuda z sortowaniem godziny i daty jednocześnie smile.gif

OK, ale to i tak nie będzie miało znaczenia na wynik końcowy, bo nawet w takim przypadku trzeba będzie sprawdzić który z połączonych wierszy ma wartość najmniejszą.
Obecnie muszę sprawdzić spośród 2 (data,godz) x 3 (1,2,3) komórek, a przypadku połączenia ich (jak mówisz) 1 x 3.

Być może tak zrobię, ale najpierw chciałbym wiedzieć jak można sprawdzić który z danych wierszy ma najmniejszą wartość i posortować (ORDER BY (komórka z najmniejszą wartością) ASC).
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.