Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie wynikow wyszukiwania
Forum PHP.pl > Forum > Przedszkole
źrebak
w otrzymanej tabeli z wynikami wyszukiwania chcialbym robic sortowanie klikajac nazwe poszczegolnej kolumny, np. po kliknieciu w imie, sortowanie jest po ;imie; itd..

Chcialem to zrobic w ten sposob, ze podpinam pod nazwe kolumny link, np.:
  1. <?php
  2.  PRINT &#092;"<a href=\"sort.php?sortujaca=o6.tekst\"><font face=\"Verdana, Arial, Helvetica,
  3. sans-serif&#092;" size=\"-2\" color=white><b>Dzielnica
  4.  </b></font></td>&#092;";
  5. ?>


W pliku sort.php umiescilem identyczny kod jak w pliku ktory wygenerowal mi tabele pierwsza, bazowa, czyli bez sortowania. W pliku sort.php zmienilem tylko ORDER BY $sortujaca.

Wydaje mi sie ze powyzsze nie bedzie dzialac, chocby dlatego, ze skrypt musi pobierac z wczesniej wypelnionego formularza dane niezbedne do przedstawienia interesujacych nas wynikow wyszukiwania, dlatego powtorne zrealizowanie tego samego zapytania, tyle ze ze zmienna w ORDER BY nie przyniesie oczekiwanego skutku.

W jaki wiec sposob mozna przeprowadzic to sortowanie?
Pigula
mozesz to zrobic na dwa sposoby po pierwsze mozesz gdzies zapamietac kategorie wedlug ktorych wyszukujesz albo wczytac wyniki do pomocniczej tablicy i sortowac wedlug odpowiedniej kolumny. to tyle co tak na szybko przychodzi mi do glowy winksmiley.jpg
źrebak
w jaki sposob moge wczytac wyniki z pierwotnego wyszukiwania do pomocniczej tablicy i pozniej na niej przeprowadzac sortowanie wedlug ustalonego parametru?
Pigula
po prostu jak wyciagasz jakas zmienna z bazy to wpisujesz ja do tablicy dwuwymiarowej np. a[$i][$j] gdzie po i masz kolejnych uzytkownikow a po j ich dane jak kliknie na link to przekazujesz po czym ma byc sortowane np. po ksywie a ksywa jest w 3 kolumnie wiec a[$i][2] i porownujesz. a sortowania to albo napisz swoje wlasne albo poszukaj w manualu o funkcji sortujacej
revyag
A może po prostu po klinięciu na linka wywołuj za każdym razem zapytanie mysql które wyświetla Ci wyniki wyszukiwania.
W zmiennej $ord będziesz miał porządek sortowania.
  1. <?php
  2. if(isset($_GET[&#092;"ord\"])){
  3. $ord = $_GET[&#092;"ord\"];
  4. //wyświetlenie posortowanych wyników wyszukiwania
  5. }else{
  6. //wyświetlenie wyników wyszukiwania bez sortowania 
  7. }
  8.  
  9. ?>

A link by wyglądał tak:
  1. <?php
  2. echo '<a href=\"plik_bieżący.php?ord=name\">Name</a>';
  3. ?>

gdzie name - nazwa odpowiedniej kolumny
źrebak
no tak wlasnie chcialem zrobic, ale:

- nie moge chyba wywolac jeszcze raz tego samego zapytania, gdyz to zapytanie wywolane poraz pierwszy 'ciagnie' rozne parametry z formularza, na podstawie ktorych przeszukuje baze. To zapytanie zawiera wiele parametrow przekazywanych z formularza za pomoca GETa
revyag
Jedyny sensowny pomysł jaki mi przychodzi do głowy, to zapamiętywanie tych kryteriów wyszukiwania.
Możnaby je zapisywać w sesji i potem przy sortowaniu z nich korzystać. Zapytanie które wyciąga dane z bazy ma jakiś szablon, więc podstawiasz prametry z sesji do zapytania i robisz tak jak poprzednio pokazałem.
Ewentualnie możnaby wrzucać te dane do jakiejś tymczasowej bazy i stamtąd je pobierać, nie korzystasz wtedy z sesji, ale musisz zrobić dodatkową tabelę.
źrebak
no ok, zalozenie tego pomyslu jest dla mnie jasne. Nie wiem tylko jak to zrealizowac, tzn w jaki sposob mozna podstawic parametry z sesji do zapytania? Rozumiem, ze ma to wygladac tak:
1) search.php - plik ktory realizuje pierwsze (glowne) zapytanie, pobierajac z formularza dane niezbedne do przefiltrowania bazy
2) sort.php - plik, ktory jest odnosnikiem dla kolumny o nazwie NAME w pliku search.php, gdzie
  1. <?php
  2. <a href=&#092;"sort.php?ord=NAME\">
  3. ?>
Po kliknieciu na nazwe kolumny NAME w pliku search.php zostaje uruchomiony plik sort.php ktory realizuje identyczne zapytanie jak search.php dzieki temu ze mozna mu podac parametry z sesji + ORDER BY $ord.

myle sie?
revyag
No nie do końca tak smile.gif
Zauważ że dodatkowy plik z kodem nie jest potrzebny. Wszystko robisz w jednym pliku.
Przykładowo dzieje się to tak:
1. Najpierw wyszukiwanie na podstawie danych z formularza, kryterium wyszukiwania zapisywane do sesji
  1. <?php
  2. //$_POST[\"kryterium\"] - to kryterium z formularza
  3. $_SESSION[&#092;"k1\"] = $_POST[\"kryterium1\"];
  4. $_SESSION[&#092;"k2\"] = $_POST[\"kryterium2\"];
  5. //..idt
  6.  
  7. ?>

2. Masz wyświetlone wyniki wyszukiwania, nazwa każdej kolumny jest linkiem, który wywołuje sortowanie. Parametr, który określa sortowanie doklejasz do urla.
  1. <?php
  2. echo '<a href=\"'.$SERVER['PHP_SELF'].'?ord=name\">Nazwa_kolumny</a>';
  3. ?>

3. Sprawdzasz czy ustawiona jest zmienna $_GET["ord"] - czyli został kliknięty link, i wywołujesz zapytanie.
  1. <?php
  2. if(isset($_GET[&#092;"ord\"])){
  3. //zapytanie
  4. $nazwa_kolumny = $_GET[&#092;"ord\"];
  5. $k1 = $_SESSION[&#092;"k1\"];
  6. $k2 = $_SESSION[&#092;"k2\"];
  7. $query = &#092;"select ...where kolumna1='$k1' and kolumna2=$k2 order by '$nazwa_kolumny'\";
  8. }
  9. ?>

To tylko przykład zapytania. Musi być ono takie samo jak to które wykorzystuje dane z formularza, dodajesz tylko parametr odpowedzialny za sortowanie.
Optymalne rozwiązanie to to napewno nie jest, ale nic innego nie przychodzi mi do głowy smile.gif
źrebak
No OK. zaimplementowalem Twoj pomysl w swoim kodzie. Nie ma zadnych bledow, ale niestety po kliknieciu na nazwe kolumny celem posortowania wynikow wyszukiwania baza 'gubi' otrzymane wczesniej warunki dla wyszukiwania - wiec tak jakby dane nie zapisuja sie tak jak trzeba do sesji..

  1. <?php
  2.  
  3. //************************************************************
  4. // *** POBIERANIE DANYCH Z FORMULARZA*************************
  5. //************************************************************
  6.  
  7.  
  8. if(!isset($_GET['dzielnica[]']))
  9.  echo;
  10.  
  11. if(!isset($_GET['powmin']))
  12.  echo;  
  13.  
  14. if(!isset($_GET['powmax']))
  15.  echo;
  16. if(!isset($_GET['pokmin']))
  17.  echo;
  18. if(!isset($_GET['pokmax']))
  19.  echo;  
  20.  
  21. if(!isset($_GET['pietro[]']))
  22.  echo; 
  23.  
  24. if(!isset($_GET['cenamin']))
  25.  echo;
  26. if(!isset($_GET['cenamax']))
  27.  echo;  
  28.  
  29.  
  30. if(!isset($_GET['budynek[]']))
  31.  echo; 
  32.  
  33. if(!isset($_GET['miasto']))
  34.  echo; 
  35.  
  36.  
  37. if(!isset($_GET['nr']))
  38.  echo; 
  39.  
  40.  
  41.  
  42. //***********************************************************
  43. // *********** ZAPISANIE DANYCH Z FORMULARZA DO SESJI ******** 
  44. //***********************************************************
  45.  
  46.  
  47. //$_POST[\"kryterium\"] - to kryterium z formularza
  48. $_SESSION[&#092;"k1\"] = $_GET[\"dzielnica[]\"];
  49. $_SESSION[&#092;"k2\"] = $_GET[\"powmin\"];
  50. $_SESSION[&#092;"k3\"] = $_GET[\"powmax\"];
  51. $_SESSION[&#092;"k4\"] = $_GET[\"pokmin\"];
  52. $_SESSION[&#092;"k5\"] = $_GET[\"pokmax\"];
  53. $_SESSION[&#092;"k6\"] = $_GET[\"pietro[]\"];
  54. $_SESSION[&#092;"k7\"] = $_GET[\"cenamin\"];
  55. $_SESSION[&#092;"k8\"] = $_GET[\"cenamax\"];
  56. $_SESSION[&#092;"k9\"] = $_GET[\"budynek[]\"];
  57. $_SESSION[&#092;"k10\"] = $_GET[\"miasto\"];
  58. $_SESSION[&#092;"k11\"] = $_GET[\"nr\"];
  59.  
  60. // *******************************************************************************
  61. *********
  62. // *************** P O L A C Z E N I E Z B A Z A *******************
  63. //********************************************************************************
  64. *********
  65.  
  66. //bla bla bla
  67.  
  68. //***********************************************
  69. // zapisanie danych z 'sesji' do zmiennych
  70. //**********************************************
  71.  
  72.  
  73. if(isset($_GET[&#092;"ord\"]))
  74.  
  75. {
  76. //zapytanie
  77.  
  78. $ORD = $_GET[&#092;"ord\"];
  79.  
  80. $k1 = $_SESSION[&#092;"k1\"];
  81. $k2 = $_SESSION[&#092;"k2\"];
  82. $k3 = $_SESSION[&#092;"k3\"];
  83. $k4 = $_SESSION[&#092;"k4\"];
  84. $k5 = $_SESSION[&#092;"k5\"];
  85. $k6 = $_SESSION[&#092;"k6\"];
  86. $k7 = $_SESSION[&#092;"k7\"];
  87. $k8 = $_SESSION[&#092;"k8\"];
  88. $k9 = $_SESSION[&#092;"k9\"];
  89. $k10 = $_SESSION[&#092;"k10\"];
  90. $k11 = $_SESSION[&#092;"k11\"];
  91.  
  92. // warunek WHERE dla zapytania jest dynamiczny i tworze go przy pomocy zmiennej $s
  93. rtowanie, do ktorej dopisuje warunki przesylane z formularza
  94.  
  95. $sortowanie = &#092;"WHERE o1.parametr=26 AND o1.tekst='AKTUALNA' AND o1.operacja=1 AND o1.nieruchomosc=2  \";
  96.  
  97.  
  98.  
  99. // ***************************************************************** 
  100. // *  WARUNKI Z FORMULARZA DLA SORTOWANIA * 
  101. // *****************************************************************
  102.  
  103. if(strlen($k1[0])>0) 
  104.  $sortowanie.=&#092;" AND (o6.tekst='$k1[0]' OR o6.tekst='$k1[1]' OR o6.tekst='$k1[2]' 
  105. OR o6.tekst='$k1[3]' OR o6.tekst='$k1[4]' OR o6.tekst='$k1[5]' OR o6.tekst='$k1[6]')&#092;";
  106.  
  107. //if(strlen($lokalizacja[0])>0) 
  108.  //$sortowanie.=\" AND (o12.tekst='$lokalizacja[0]' OR o12.tekst='$lokalizacja[1]' OR o12.tekst='$lokalizacja[2]' 
  109. //OR o12.tekst='$lokalizacja[3]' OR o12.tekst='$lokalizacja[4]' OR o12.tekst='$lokalizacja[5]' OR o12.tekst='$lokalizacja[6]')\";
  110.  
  111. if(strlen($k2[0])>&& strlen($k3[0]>0)) 
  112.  $sortowanie.=&#092;" AND (o9.liczba >= $k2 AND o9.liczba <=$k3)\";
  113.  
  114.  
  115. if (strlen($k2[0])>0) 
  116.  $sortowanie.=&#092;" AND (o9.liczba >= $k2)\";
  117.  
  118. if (strlen($k3[0])>0) 
  119.  $sortowanie.=&#092;" AND (o9.liczba <= $k3)\";
  120.  
  121. if(strlen($k4[0])>&& strlen($k5[0]>0)) 
  122.  $sortowanie.=&#092;" AND (o7.liczba >= $k4 AND o7.liczba <=$k5)\";
  123.  
  124. if (strlen($k4[0])>0) 
  125.  $sortowanie.=&#092;" AND (o7.liczba >= $k4)\";
  126.  
  127. if (strlen($k5[0])>0) 
  128.  $sortowanie.=&#092;" AND (o7.liczba <= $k5)\";
  129.  
  130.  
  131. if(strlen($k6[0])>0) 
  132.  $sortowanie.=&#092;" AND (o8.tekst='$k6[0]' OR o8.tekst='$k6[1]' OR o8.tekst='$k6[2]' 
  133. OR o8.tekst='$k6[3]' OR o8.tekst='$k6[4]' OR o8.tekst='$k6[5]' OR o8.tekst='$k6[6]')&#092;";
  134.  
  135.  
  136. if(strlen($k7[0])>&& strlen($k8[0]>0)) 
  137.  $sortowanie.=&#092;" AND (o10.liczba >= $k7 AND o10.liczba <=$k8)\";
  138.  
  139. if (strlen($k7[0])>0) 
  140.  $sortowanie.=&#092;" AND (o10.liczba >= $k7)\";
  141.  
  142. if (strlen($k8[0])>0) 
  143.  $sortowanie.=&#092;" AND (o10.liczba <= $k8)\";
  144.  
  145.  
  146. //if(strlen($lokalizacja[0])>0) 
  147.  //$sortowanie.=\" AND (o12.tekst='$lokalizacja[0]' OR o12.tekst='$lokalizacja[1]' OR o12.tekst='$lokalizacja[2]' 
  148. //OR o12.tekst='$lokalizacja[3]' OR o12.tekst='$lokalizacja[4]' OR o12.tekst='$lokalizacja[5]' OR o12.tekst='$lokalizacja[6]')\";
  149.  
  150. if(strlen($k9[0])>0) 
  151.  $sortowanie.=&#092;" AND (o13.tekst='$k9[0]' OR o13.tekst='$k9[1]' OR o13.tekst='$k9[2]' 
  152. OR o13.tekst='$k9[3]' OR o13.tekst='$k9[4]' OR o13.tekst='$k9[5]' OR o13.tekst='$k9[6]')&#092;";
  153.  
  154. if(strlen($k11[0])>0) 
  155.  $sortowanie.=&#092;" AND (mls.liczba='$k11')\";
  156.  
  157. if(strlen($k10[0])>0) 
  158.  $sortowanie.=&#092;" AND (o5.tekst = '$k10')\";
  159.  
  160.  
  161.  
  162. //ZAPYTANIE DLA SYTUACJI KIEDY SORTUJEMY
  163.  
  164.  
  165. $sql= &#092;" SELECT 
  166.  
  167. o1.sygnatura, o1.nieruchomosc, o1.operacja, o3.liczba, o4.liczba, o5.tekst, o6.tekst, o7.liczba, o8.tekst, o9.liczba, o10.liczba, o11.tekst, o12.tekst, o13.tekst, mls.liczba, o14.liczba, o15.tekst
  168. FROM oferty AS o1
  169. LEFT JOIN oferty AS o2 ON ( o2.sygnatura = o1.sygnatura AND o2.parametr=1)
  170. LEFT JOIN oferty AS o3 ON ( o3.sygnatura = o1.sygnatura AND o3.parametr =10 )
  171. LEFT JOIN oferty AS o4 ON ( o4.sygnatura = o1.sygnatura AND o4.parametr =11 )
  172. LEFT JOIN oferty AS o5 ON ( o5.sygnatura = o1.sygnatura AND o5.parametr =48 )
  173. LEFT JOIN oferty AS o6 ON ( o6.sygnatura = o1.sygnatura AND o6.parametr =49 )
  174. LEFT JOIN oferty AS o7 ON ( o7.sygnatura = o1.sygnatura AND o7.parametr =79 )
  175. LEFT JOIN oferty AS o8 ON ( o8.sygnatura = o1.sygnatura AND o8.parametr =62 )
  176. LEFT JOIN oferty AS o9 ON ( o9.sygnatura = o1.sygnatura AND o9.parametr =128 )
  177. LEFT JOIN oferty AS o10 ON ( o10.sygnatura = o1.sygnatura AND o10.parametr =10 )
  178. LEFT JOIN oferty AS o11 ON ( o11.sygnatura = o1.sygnatura AND o11.parametr =26)
  179. LEFT JOIN oferty AS o12 ON ( o12.sygnatura = o1.sygnatura AND o12.parametr =135 )
  180. LEFT JOIN oferty AS o13 ON ( o13.sygnatura = o1.sygnatura AND o13.parametr =70 )
  181. LEFT JOIN oferty AS mls ON ( mls.sygnatura = o1.sygnatura AND mls.parametr =50 )
  182. LEFT JOIN oferty AS o14 ON ( o14.sygnatura = o1.sygnatura AND o14.parametr =13 )
  183. LEFT JOIN oferty AS o15 ON ( o15.sygnatura = o1.sygnatura AND o15.parametr =72 )
  184.  
  185.  $sortowanie ORDER BY $ORD&#092;";
  186. } // tu konczy sie klauzula 
  187. // if(isset($_GET[\"ord\"])) {
  188.  
  189. ?>
Gość_ftrunks
hm moze wystarczy zainicjowac sesje (session_start() ) i zarejestrowac zmienne przed nadaniem im wartosci (session_register() ) ? moze to pomoze smile.gif
Guest
w jaki sposob inicjuje sie sesje? z tego co wyczytalem, zaraz na poczatku skryptu wystarczy umiescic:
  1. <?php
  2. ?>


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