Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie wg dowolnej kolumny
Forum PHP.pl > Forum > Przedszkole
powertee
powiedzmy ze mamy taaką tabele do której wczytywane są dane z bazy danych mysql.
chciałbym zeby po kliknieciu linku w nagłówku każdej koluny została wykonana operacja sortuj. jedno klikniecie-->sortowanie rosnące a drugie malejące i tak z kazdą kolumną wie ktoś jak to zrobić??
  1. <table width="75%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#EFEFEF" rules="all">
  2. <tr>
  3. <th height="29" colspan="5" scope="col"><span class="style5">BAZA WYKONAWCÓW</span></th>
  4. </tr>
  5. <tr>
  6. <th height="20" class="style10" scope="col"><em><strong>Imie</strong></em></th>
  7. <th class="style10" scope="col"><em><strong>Nazwisko</strong></em></th>
  8. <th class="style10" scope="col"><em><strong>Rok Urodzenia</strong></em></th>
  9. <th class="style23" scope="col">Uwagi</th>
  10. <th class="style23" scope="col">Akcja</th>
  11. </tr>
  12. <tr>
  13. <?php
  14. /* Tabela Wykonawców */
  15. $songsql = "SELECT * FROM artist" ;
  16. $result = mysql_query($songsql)
  17. or die ("Niepoprawne zapytanie: " . mysql_error());
  18. while ($row = mysql_fetch_array($result)) {
  19. ?>
  20.  
  21. <th width="19%" height="28" scope="col"> <? echo $row['name'] ; ?> </th>
  22. <th width="20%" scope="col"> <? echo $row['surname']; ?> </th>
  23. <th width="14%" scope="col"> <? echo $row['data'] ; ?> </th>
  24. <th width="35%" scope="col"><? echo $row['uwagi'] ; ?> </th>
  25. <th width="12%" scope="col">
  26.  <span class="style24"><a href="artist.php?action=edit&id=<?
  27. echo $row['id_artist']; ?>">[Edytuj]</a>
  28.  <a href="delete.php?type=artist&id=
  29.  <? echo $row['id_artist']; ?>">[Usuń]</a></span></th>
  30. </tr>
  31. <?php
  32. }
  33. ?>
  34. <tr>
  35. <th height="29" colspan="5" scope="col"><a href="artist.php?action=add&id=">[Dodaj Wykonawce]</a></th>
  36. </tr>
  37. </table>
webdice
Sortowanie rosnąco:

  1. SELECT * FROM `tabela` ORDER BY `pole` ASC


Sortowanie malejąco:

  1. SELECT * FROM `tabela` ORDER BY `pole` DESC


Tworzysz sobie ifa który sprawdza czy parametr z adresu. Na przykład:

Kod
index.php?sortby=pole&type=asd


  1. <?php
  2. if (empty ($_GET['type']))
  3. {
  4. $_GET['type'] = 'ASC';
  5. }
  6.  
  7. if (empty ($_GET['sortby']))
  8. {
  9. $_GET['sortby'] = 'pole';
  10. }
  11.  
  12. $query = mysql_query ("SELECT * FROM `tabela` ORDER BY `" . $_GET['sortby'] . "` . " $_GET['type']);
  13. ?>


Coś w ten deseń.
powertee
a mogł byś spróbowac wpisać to w mój skrypt, nie bardzo wiem jak to zrobic:/
webdice
Nie powinienem tego robić. Pisane z palca.

Kod
<table width="75%" border="1" align="center" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#EFEFEF" rules="all">
  <tr>
    <th height="29" colspan="5" scope="col"><span class="style5">BAZA WYKONAWCÓW</span></th>
  </tr>
  <tr>
    <th height="20" class="style10" scope="col"><em><strong><a href="?orderby=name&type=desc">Imie</a></strong></em></th>
    <th class="style10" scope="col"><em><strong><a href="?orderby=surname&type=desc">Nazwisko</a></strong></em></th>
    <th class="style10" scope="col"><em><strong><a href="?orderby=data&type=desc">Rok Urodzenia</a></strong></em></th>
    <th class="style23" scope="col"><a href="?orderby=data&type=desc">Uwagi</a></th>
    <th class="style23" scope="col">Akcja</th>
  </tr>
  <tr>
<?php  
                                                                              /* Tabela Wykonawców */

if (empty ($_GET['type']))
{
  $_GET['type'] = 'DESC';
}

if (empty ($_GET['sortby']))
{
  $_GET['sortby'] = 'name';
}

$songsql = mysql_query ("SELECT * FROM `artist` ORDER BY `" . $_GET['sortby'] . "` . " $_GET['type']);
$result = mysql_query($songsql)
or die ("Niepoprawne zapytanie: " . mysql_error());
while ($row = mysql_fetch_array($result)) {
?>
    
    <th width="19%" height="28" scope="col">      <? echo $row['name']; ?> </th>
    <th width="20%" scope="col">      <? echo $row['surname']; ?> </th>
    <th width="14%" scope="col">      <? echo $row['data']; ?> </th>
    <th width="35%" scope="col"><? echo $row['uwagi']; ?> </th>
    <th width="12%" scope="col">
       <span class="style24"><a href="artist.php?action=edit&id=<?
        echo $row['id_artist']; ?>">[Edytuj]</a>
       <a href="delete.php?type=artist&id=
       <? echo $row['id_artist']; ?>">[Usuń]</a></span></th>
  </tr>
<?php
}
?>
  <tr>
    <th height="29" colspan="5" scope="col"><a href="artist.php?action=add&id=">[Dodaj Wykonawce]</a></th>
  </tr>
</table>
powertee
wydaje mi sie ze zamiast sortby powinno być orderby.
i w tej linijce wywalami błąd składni (syntax error, unexpected T_VARIABLE)
$songsql = mysql_query ("SELECT * FROM `artist` ORDER BY `" . $_GET['orderby'] . "` . " $_GET['type']);
webdice
Sory za wprowadzenie w błąd, powinno być tak (źle wstawiłem kropkę):

  1. <?php
  2. $songsql = mysql_query ("SELECT * FROM `artist` ORDER BY `" . $_GET['sortby'] . "` " . $_GET['type']);
  3. ?>


Musi być sortby bo to jest nazwa parametru GET.
powertee
ale w linkach jest orderby
nospor
No to daj orderby. Robisz problem z niczego tongue.gif
webdicepl po prostu zapomnial i raz dawal w linkach sortby a raz order by. Tobie jak sie podoba to mozesz dac nawet alamakota tylko sie tego trzymaj i nie myl
powertee
dobra już sobie poradziłem, ale działa to w jedną stronę chciałbym zeby działo sie coś takiego:
klikasz naprzykład nagłówek imie i wyświetla posortowane wartości rosnąco i z tego poziomu kikam jeszcze raz i sortuje malejąco
webdice
Kod
<th height="20" class="style10" scope="col"><em><strong><a href="?orderby=name&type=<?php print ($_GET['type'] == 'DESC') ? 'ASC' : 'DESC'; ?> ?>">Imie</a></strong></em></th>


I analogicznie z resztą.
powertee
dzięki bardzo:) to już chyba mój ostatni post w tym temacie, a co do tej ostatniej linijki dałeś o jeden za dużo "?>" ale spoko jeszcze raz dzieki:)

a jednak nie ostatni... myślałem ze zakończe już ten temat ale niestety musze drążyć go dalej...
posiadam relacyjną baze danych. dwie tabele w bazie jedna artystów druga utworów. tabela utworów pobiera wykonawce z tabeli artstów za pomocą id.
chciałbym osiągnąć coś takiego zeby pobrani wykonawcy w tabeli utworów mogli być
posortowani alfabetycznie wg nazwiska a nie id. niestety nie bardzo sie
orientuje jak ma to być zrobione. CZY WIE KTOś JAK TO MA WYGLąDAć??
pełny skrypt znajduje sie pod adresem <a href="http://powertee.w.interia.pl/sorting.txt" target="_blank">http://powertee.w.interia.pl/sorting.txt</a>
chodzi mi tylko o kolumne wykonawcy reszta jest dobrze
  1. <th height="22" scope="col"><span class="style10"><a href="?sort=title&typ=<?php print ($_GET['typ'] == 'DESC') ? 'ASC' : 'DESC'; ?>">Tytuł</span></th>
  2. <th scope="col"><span class="style10"><a href="?sor=surname&typ1=<?php print ($_GET['typ1'] == 'DESC') ? 'ASC' : 'DESC'; ?>">Wykonawca</span></th>
  3. <th scope="col"><span class="style10"><a href="?sort=rok_prem&typ=<?php print ($_GET['typ'] == 'DESC') ? 'ASC' : 'DESC'; ?>">Premiera</span></th>
  4. <th scope="col"><span class="style10"><a href="?sort=album&typ=<?php print ($_GET['typ'] == 'DESC') ? 'ASC' : 'DESC'; ?>">Album</span></th>
  5. <th scope="col"><span class="style10"><a href="?sort=kod&typ=<?php print ($_GET['typ'] == 'DESC') ? 'ASC' : 'DESC'; ?>">Kod Płyty</span></th>
  6. <th scope="col"><span class="style10"><a href="?sort=uwagi&typ=<?php print ($_GET['typ'] == 'DESC') ? 'ASC' : 'DESC'; ?>">Uwagi</span></th>
  7. <th scope="col"><span class="style10">Akcja</span></th>
  8. </tr>
  9. <tr>
  10. <?php
  11. /* tabela UTWORÓW */
  12.  
  13.  
  14. if (empty ($_GET['typ']))
  15. {
  16. $_GET['typ'] = 'ASC';
  17. }
  18.  
  19. if (empty ($_GET['sort']))
  20. {
  21. $_GET['sort'] = 'title';
  22. }
  23.  
  24. $query = ("SELECT * FROM `song` ORDER BY `" . $_GET['sort'] . "` " . $_GET['typ']);
  25.  
  26. $result = mysql_query($query, $link)
  27. or die (mysql_error());
  28. $song_header=<<<EOD
  29.  
  30.  
  31.  
  32.  
  33. EOD;
  34. function get_name() {
  35. global $namezmienna;
  36. global $artistname;
  37.  
  38. $query_d = "SELECT name, id_artist FROM artist " .
  39. "WHERE id_artist='$namezmienna'" ;
  40. $results_d = mysql_query($query_d)
  41. or die(mysql_error());
  42. $row_d = mysql_fetch_array($results_d);
  43. extract($row_d);
  44. $artistname = $name;
  45. }
  46.  
  47. function get_surname() {
  48. global $surnamezmienna;
  49. global $artistsurname;
  50. if (empty ($_GET['typ1']))
  51.  
  52. $query_a = "SELECT surname FROM artist WHERE id_artist='$surnamezmienna' ";
  53. $results_a = mysql_query($query_a)
  54.  or die(mysql_error());
  55.  $row_a = mysql_fetch_array($results_a);
  56.  extract($row_a);
  57. $artistsurname = $surname; 
  58. }
  59.  
  60. while ($row =mysql_fetch_array($result))
  61. {
  62. $id_song = $row['id_song'];
  63. $title = $row['title'];
  64. $namezmienna = $row['id_artist_song'];
  65. $surnamezmienna = $row['id_artist_song'];
  66. $rok_prem = $row['rok_prem'];
  67. $album = $row['album'];
  68. $kod = $row['kod'];
  69. $uwagi = $row['uwagi'];
  70.  
  71.  
  72. get_name();
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.