Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Sortowanie tablicy
Forum PHP.pl > Forum > Przedszkole
Swi7ch
Otóż mam taki kod:
  1. <?php
  2.  
  3.  
  4. foreach (array_merge(glob("upload/*.txt"),glob("upload/*.TXT")) as $filename) {
  5.    $path = $filename;
  6. $file = basename ($path);
  7. include('connect.php');
  8. $query="SELECT opis FROM wyniki WHERE plik='$file' ORDER BY data";
  9. $result=mysql_query($query);
  10. $row = mysql_fetch_assoc($result);
  11. foreach($row as $wartosc) {
  12.    echo "<a href=\"$filename\">$wartosc</a>";
  13.    echo "<br /><br />";
  14.    
  15.    }
  16.  
  17. }
  18. ?>


Pobieram wszystkie nazwy plików z folderu i przyporządkowuje je do opisów które każdy plik ma w bazie danych. Mam problem z posortowaniem tego. W kodzie znajduje się ORDER BY jednak nie jest to żadne rozwiązanie, gdyż skrypt wyświetla chyba wg kolejności w jakiej zczyta pliki z folderów. Chciałbym posortować to wg. kolumny data która znajduje się w bazie.

pozdrawiam
PawelC
  1. <?php
  2. $query="SELECT opis FROM wyniki WHERE plik='$file' ORDER BY data DESC";
  3. ?>


ASC - sortowanie rosnąco, domyślny sposób sortowania
DESC - sortowanie malejąco -> od najnowszego do najstarszego
Swi7ch
To nie rozwiązuje problemu bo skrypt NAJPIERW bierze plik, a potem dopasowuje do pliku opis z bazy, wiec na dobrą sprawę wszystko jest wyświetlane w takiej kolejności w jakiej funkcja glob sprawdza pliki
PawelC
Wystarczy poszukać o sortowaniu tablicy
A także: http://pl.php.net/sort
Swi7ch
Próbowałem sortować to na różne sposoby, które wydawały mi się logiczne, a i na te nielogiczne również, i nie doszedłem do odpowiedniego rezultatu. Podejrzewam, że trzeba troszkę przeprojektować ten skrypt, dlatego liczę na wskazówki.

Jeżeli chodzi o sortowanie $row to nie ma to żadnego sensu sad.gif
PawelC
tutaj masz bardzo ciekawy artykuł o sortowaniu: http://www.egrafik.pl/porady/php-jak-sorto...-i-asocjacyjne/
w szczególności zobacz 3 przykład smile.gif W twoim wypadku zamiast ceny, będzie data.
I tutaj masz o sortowaniu wg dowolnego pola tablicy: http://pawkow.jogger.pl/2009/02/14/sortowa...osciach-kluczy/
Swi7ch
Byłem tam jakieś 2 godziny temu tongue.gif
Wg daty nie mogę wysortować, bo nawet jej nie pobieram z bazy snitch.gif
PawelC
To po jakiej dacie chcesz sortować?

Cytat
Chciałbym posortować to wg. kolumny data która znajduje się w bazie.

To jak chcesz po dacie posortować skoro jej nie pobierasz nawet?
Swi7ch
Sortowanie row nie ma sensu ponieważ wynikiem jest tylko jedna komórka tabeli? (ze względu na: WHERE plik='$file')

PawelC
No to jak chcesz sortować skoro pobierasz jeden konkretny rekord? Nie da się posortować jednego rekordu, co innego gdybyś kilka pobierał. Gdybyś nie pobierał jednego konkretnego rekordu to mógłbyś sortować po dacie, czyli order by data desc.
Swi7ch
Więc może tak. Ok niech będzie, że chce posortować wg kolumny opis którą pobieram. Jak to zrobić?
Wydaje mi się, że nie widzisz tego na górze foreacha winksmiley.jpg

(dałem pomógł za chęci winksmiley.jpg )
PawelC
To może tak masz takie zapytanie:
  1. <?php
  2. $query="SELECT opis FROM wyniki WHERE plik='$file' ORDER BY data";
  3. ?>

Czyli pobierasz jeden konkretny rekord, a dokładnie wartość kolumny opis, where plik=cos tam

dalej jest wykonanie zapytania:
  1. <?php
  2. $result=mysql_query($query);
  3. $row = mysql_fetch_assoc($result);
  4. ?>

I tutaj po co jest ta pętla skoro pobierasz jeden rekord?? Nie rozumiem tego skoro, możesz to zrobić tak:
  1. <?php
  2. $result=mysql_query($query);
  3. $row = mysql_fetch_array($result);
  4. echo '<a href="'.$filename.'">'.$row['opis'].'</a>';
  5.   echo '<br /><br />';
  6.   ?>

I bez użycia pętli która jest tu Ci nie potrzebna. Bo po co robić pętle w pętli?

Zobacz tak:
  1. <?php
  2. foreach (array_merge(glob("upload/*.txt"),glob("upload/*.TXT")) as $filename) {
  3.   $path = $filename;
  4. $file = basename ($path);
  5. include('connect.php');
  6. $query="SELECT opis FROM wyniki WHERE plik='$file'";
  7. $result=mysql_query($query);
  8. $row = mysql_fetch_array($result);
  9. echo '<a href="'.$filename.'">'.$row['opis'].'</a>';
  10.   echo '<br /><br />';
  11.  
  12. }
  13. ?>

Posortować to mógłbyś rekordy pobrane z bazy gdybyś pobierał wszystkie na raz, bez klauzuli where np:
  1. <?php
  2. select * from wyniki
  3. ?>

I z takim zapytaniem mógłbyś sobie sortować np po dacie, a z takim zapytaniem jak ty masz, i przy użyciu where nie posortujesz.
Swi7ch
Cytat(ExPlOiT @ 19.04.2009, 23:49:10 ) *
I tutaj po co jest ta pętla skoro pobierasz jeden rekord?? Nie rozumiem tego skoro, możesz to zrobić tak:

Masz całkowitą racje, to jakaś dawna pozostałość jak skrypt wyglądał trochę inaczej. Chyba się przywiązałem biggrin.gif

A skrypt nieco przerobiłem i teraz wszystko działa (trochę namieszane ze sprawdzaniem czy zmienna jest tablicą). Sortuje sobie wg kolumny opis:
  1. <?php
  2. function addArray(&$array, $key, $val)
  3.     {
  4.     $tempArray = array($key => $val);
  5.     $array = array_merge ($array, $tempArray);
  6.     }
  7. $nosort = '';
  8. foreach (array_merge(glob("upload/*.txt"),glob("upload/*.TXT")) as $filename) {
  9.    $path = $filename;
  10. $file = basename ($path);
  11. include('connect.php');
  12. $query="SELECT opis FROM wyniki WHERE plik='$file' ORDER BY data ASC";
  13. $result=mysql_query($query);
  14. $row = mysql_fetch_assoc($result);
  15.  
  16.    if (is_array($nosort)==TRUE) {
  17.    addArray($nosort, $filename, $row['opis']);
  18.    } else {
  19.        unset($nosort);
  20.        $nosort = array($filename => $row['opis']);    }    
  21.  
  22. }
  23. sort($nosort);
  24. foreach ($nosort as $key=>$val)
  25. {
  26.    echo "<a href=\"$key\">$val</a>";
  27.    echo "<br /><br>";
  28. }
  29.  
  30.  
  31. ?>
PawelC
z tej linijki:
  1. <?php
  2. $query="SELECT opis FROM wyniki WHERE plik='$file' ORDER BY data ASC";
  3. ?>

możesz wywalić
  1. <?php
  2. ORDER BY data ASC
  3. ?>

bo przy pobieraniu jednego rekordu nic to nie daje i jest zbędne.
Swi7ch
No oczywiście. Nie zauważyłem, że zostało winksmiley.jpg
Dzięki
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.