Comment sortinger le contenu d'une table mysql de différentes façons sans avoir plusieurs pages?

J'ai une section sur mon site où les users peuvent publier des commentaires. Juste au-dessus de ces commentaires, j'ai 4 liens: le plus ancien, le plus récent, le mieux classé et le pire évalué. Actuellement, j'ai 4 pages différentes pour chacun de ces liens.

old.php: les commentaires par date et heure augmentent

newest.php – sort les commentaires par date et heure décroissant

top.php – sort les commentaires en fonction de combien aiment ils ont

worst.php – sort les commentaires en fonction du nombre de dégoûts qu'ils ont

Ils sont tous sortingés avec une instruction mySQL telle que

$sql = "SELECT * FROM comments ORDER BY date DESC, time DESC LIMIT $offset, $rowsperpage"; 

Je me request simplement s'il est possible de order ces commentaires en utilisant une seule page au lieu de disposer de 4 pages différentes?

Toute aide serait grandement appréciée.

Oui, vous passez la colonne de sorting et la direction dans l'URL.

 $type = 'new'; // default order $cols = array('old', 'new', 'worst'); // array with possible options columns, to prevent SQL injection if (in_array($_GET['type'], $cols) { $type = $_GET['type']; } $order = (strtolower($_GET['order']) == 'asc')?'ASC':'DESC'; // again - to prevent bad data $sql = "SELECT * FROM comments ORDER BY {$type} {$order}, time DESC LIMIT $offset, $rowsperpage"; 

Si vous avez des requêtes différentes, utilisez simplement une instruction switch() et modifiez la requête en conséquence pour chaque type de command.

 // use the same order as before switch ($_GET['type']): case 'old': $sql = " ... "; break; // more options default: // default can be used for the most common option, for example when you first enter the page with no type argument in the URL break; 

Encore une chose: pour générer les URL, vous pouvez utiliser ceci:

 $cols = array('old', 'new', 'worst'); // you can make this array a config variable $order = array('asc', 'desc'); foreach ($cols as $col) { foreach ($order as $ord) { echo "<a href='index.php?type={$col}&order={$ord}'>".ucwords($col). ' ' . ucwords($ord)"</a>"; } } 

Cela printingnera tous les types avec toutes les commands possibles. Vous devriez jouer avec cela, vous pouvez faire des trucs soignés et dynamics.

Bien sûr, vous pouvez avoir une seule page pour gérer cela.

Au lieu de 4 pages, vous pouvez avoir une seule page

comments.php

et puis vous pouvez passer le paramètre GET comme ci-dessous pour 4 liens

comments.php?type=oldest
comments.php?type=newest
comments.php?type=top
comments.php?type=worst

Ensuite, sur comments.php vous pouvez mettre une déclaration conditionnelle comme ci-dessous:

 $order_by = "ORDER BY date DESC, time DESC"; // Default order if(isset($_GET["type"]) && $_GET["type"] == "newest") $order_by = "ORDER BY date DESC, time DESC"; elseif(isset($_GET["type"]) && $_GET["type"] == "oldest") $order_by = "ORDER BY date, time"; elseif(isset($_GET["type"]) && $_GET["type"] == "top") ... put your order by here ... elseif(isset($_GET["type"]) && $_GET["type"] == "worst") ... put your order by here ... 

Ensuite, utilisez ci-dessous $ sql

$ sql = "SELECT * FROM comments". $ order_by. "LIMIT $ offset, $ rowsperpage";