Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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
PawelC
post
Post #2





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

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


  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

Ten post edytował ExPlOiT 19.04.2009, 23:59:57
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%)
-----


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
Go to the top of the page
+Quote Post
PawelC
post
Post #4





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

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


Wystarczy poszukać o sortowaniu tablicy
A także: http://pl.php.net/sort
Go to the top of the page
+Quote Post
Swi7ch
post
Post #5





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

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


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

Ten post edytował Swi7ch 20.04.2009, 00:12:50
Go to the top of the page
+Quote Post
PawelC
post
Post #6





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

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


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/

Ten post edytował ExPlOiT 20.04.2009, 00:17:45
Go to the top of the page
+Quote Post
Swi7ch
post
Post #7





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

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


Byłem tam jakieś 2 godziny temu tongue.gif
Wg daty nie mogę wysortować, bo nawet jej nie pobieram z bazy snitch.gif
Go to the top of the page
+Quote Post
PawelC
post
Post #8





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

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


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?
Go to the top of the page
+Quote Post
Swi7ch
post
Post #9





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

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


Sortowanie row nie ma sensu ponieważ wynikiem jest tylko jedna komórka tabeli? (ze względu na: WHERE plik='$file')



Ten post edytował Swi7ch 20.04.2009, 00:30:13
Go to the top of the page
+Quote Post
PawelC
post
Post #10





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

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


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.

Ten post edytował ExPlOiT 20.04.2009, 00:32:21
Go to the top of the page
+Quote Post
Swi7ch
post
Post #11





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

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


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 )

Ten post edytował Swi7ch 20.04.2009, 00:39:24
Go to the top of the page
+Quote Post
PawelC
post
Post #12





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 #13





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 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
PawelC
post
Post #14





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

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


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





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

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


No oczywiście. Nie zauważyłem, że zostało winksmiley.jpg
Dzięki
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: 19.08.2025 - 02:19