Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Sortowanie tablicy, problem rozwiązany
Swi7ch
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 9.04.2005

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


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

Ten post edytował Swi7ch 20.04.2009, 12:32:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
PawelC
post
Post #2





Grupa: Zarejestrowani
Postów: 1 173
Pomógł: 121
Dołączył: 24.09.2007
Skąd: Toruń

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


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.

Ten post edytował ExPlOiT 20.04.2009, 00:51:25
Go to the top of the page
+Quote Post
Swi7ch
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 9.04.2005

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował Swi7ch 20.04.2009, 11:42:45
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 19:11