ORDER BY veranderen met een link

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Richard

Richard

26/07/2006 18:27:00
Quote Anchor link
We hebben verschillende lijsten op onze site voor o.a. het nieuws, games, reviews etc. die uit de database worden gehaald en geordend staan op naam. Ik wil ze ook kunnen ordenen op auteur, datum en eventueel cijfer. Hoe kan ik dit (in een notendop) doen zonder aparte paginas te moeten aanmaken? (dus gewoon de ORDER veranderen door bv. op het kopje auteur te klikken)

Bvd
 
PHP hulp

PHP hulp

17/11/2024 00:44:48
 
Bo az

Bo az

26/07/2006 19:16:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$query
= "SELECT auteur, datum, naam FROM table";

switch($_GET['order']){
    case
1:
        $query .= " ORDER BY auteur";
        break;
    case
2:
        $query .= " ORDER BY datum";
        break;
    default:

        $query .= " ORDER BY naam";
}


?>


en dan wordt een link bv:
pagina.php?order=1
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Jan Koehoorn

Jan Koehoorn

26/07/2006 19:22:00
Quote Anchor link
Of, korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    $sortorder
= (isset ($_GET['sortorder'])) ? ($_GET['sortorder']) : ('naam');
    $query = "SELECT auteur, datum, naam FROM table ORDER BY $sortorder";
?>
 
Richard

Richard

26/07/2006 20:40:00
Quote Anchor link
Heel erg bedankt!

Oh ik heb nog één vraagje (mijn status newbie verklaart het al): Hoe kan ik de order ascending maken als de order bv. al op dat sortorder staat?
bv. je hebt auteur aangeklikt en de lijst staat descending gesorteerd op auteur, klik je nog een keer op auteur dan staat hij ascending gesorteerd.

Ik heb al wat geprobeerd met elseif ($_GET['sortorder']) = nouja dat wou allemaal niet echt werken
Gewijzigd op 01/01/1970 01:00:00 door Richard
 
Bo az

Bo az

26/07/2006 22:57:00
Quote Anchor link
Ik ga dan even verder met mijn voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

$query
= "SELECT auteur, datum, naam FROM table";

switch($_GET['order']){
    case
1:
        $query .= " ORDER BY auteur";
        break;
    case
2:
        $query .= " ORDER BY datum";
        break;
    default:

        $query .= " ORDER BY naam";
}


if(isset($_GET['type']) && $_GET['type'] == 'ASC'){
    $type = 'DESC';
}
else{
    $type = 'ASC';
}


$query .= ' '.$type;

?>


en je link wordt dan bijvoorbeeld:
pagina.php?order=1&type=$type
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Jan Koehoorn

Jan Koehoorn

26/07/2006 23:23:00
Quote Anchor link
En de uitbreiding op mijn manier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $sortorder
= (isset ($_GET['sortorder'])) ? ($_GET['sortorder']) : ('naam');
    $type = (isset ($_GET['type']) && $_GET['type'] == 'ASC') ? ('DESC') : ('ASC');
    $query = "SELECT auteur, datum, naam FROM table ORDER BY $sortorder $type";
?>
 
Bo az

Bo az

26/07/2006 23:26:00
Quote Anchor link
Had ik de boel zitten quoten ipv editen.
Gewijzigd op 01/01/1970 01:00:00 door Bo az
 
Richard

Richard

27/07/2006 00:32:00
Quote Anchor link
Heel erg bedankt weer allebei,
Het werkt perfect!
 
Hein

Hein

29/07/2006 01:51:00
Quote Anchor link
Hier is een compleet voorbeeld dat ik een keer gevonden heb op phphulp. Het is geschreven door Jan Koehoorn.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php

$db_name
= 'boekendb';
$tb_name = 'boeken';  
echo "<br><strong><center>Door op de titel van de kolommen te klikken wordt de sorteervolgorde gewijzigd.</center></strong><br><br>";
display_table('boekendb','boeken');
  function
display_table ($db_name, $tb_name) {
    # haal de namen en het aantal velden op
    $fields = mysql_list_fields ($db_name, $tb_name);
    $columns = mysql_num_fields ($fields);

    # als er op een kolomkop geklikt is, is de naam van die kolom
    # beschikbaar via $_GET

    if (isset ($_GET['order_by'])) {
      $order_by = $_GET['order_by'];
    }

    else {
      $order_by = 'id';
    }

    
    if (isset ($_GET['order_type']) && !isset ($_GET['action'])) {
      $order_type = $_GET['order_type'];
      
      if ($order_type == 'ASC') {
        $order_type = 'DESC';
      }

      else {
        $order_type = 'ASC';
      }
    }

    else {
      $order_type = 'ASC';
    }

    
    echo '<div id="table3">';
    echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
    //echo '<table border=1>';
    echo '<tr>';
    //echo '<th>edit</th>';
    //echo '<th>delete</th>';

    # de titelrij van de tabel in elkaar zetten
    # zorgen dat de kolomkoppen aanklikbaar zijn

    for ($i = 1; $i < $columns-1; $i++) {
      echo "\n";
      echo '<th>';
      $fieldname = mysql_field_name ($fields, $i) ;
      echo "<a href=\"?order_by=$fieldname&order_type=$order_type\">$fieldname</a>";
      echo '</th>';
    }

    
    $sql = "SELECT *
      FROM $tb_name
      ORDER BY $order_by $order_type"
;
    $res = mysql_query ($sql) or die (mysql_error ());
    
    while ($row = mysql_fetch_array ($res)) {
      echo "\n";
      echo '<tr>';
      # via deze links kun je de pagina uitbreiden met een delete of een edit-mogelijkheid
      //echo "<td><a href=\"?action=edit&id=$row[id]&order_by=$order_by\">edit</a></td>";
      //echo "<td><a href=\"?action=delete&id=$row[id]&order_by=$order_by\">delete</a></td>";

      
      for ($i = 1; $i < $columns-1; $i++) {
        echo '<td>';
        echo $row[$i];
        echo '</td>';
      }


      echo '</tr>';
    }


    echo '</tr>';
    echo '</table1>';
    echo '</div>';

  }

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.