PHP tri des éléments de base de données avec ORDER BY de la requête MySQL

J'ai une base de données MySQL avec qui je suis remplissage dynamique d'une page web. Je suis en train de construire une requête MySQL qui récupère certains produits stockés dans une table appelée products que je puisse ensuite l'écho sur la page en PHP. Les colonnes de cette table sont id, product_name, price et description. Je veux que l'utilisateur soit en mesure de trier les produits par ordre alphabétique, par prix (bas-haut), etc en cliquant sur les liens pertinents sur la page. C'est ce que j'ai écrit jusqu'à présent:

//Run a SELECT query to get all the products stored in the database
//By default, if no sorting URL variable is fed into the page, then the SQL query becomes order by id.
//The first time you land on the index page as plain index.php, not index.php?=variable, this is the query that's used

$sql = mysqli_query($con,"SELECT * FROM products ORDER BY id DESC");

//If the user chooses to sort the produts in a different way, then an HTML link will set a PHP variable into this page
//We will check for that variable and change the SQL query to sort the products in a different way
if (isset($_GET['sortby'])) {
  //Capture that in a variable by that name
  $sortby = $_GET['sortby'];
  //Now to change the SQL query based on the sorting the user chose (price high to low, low to high, alphabetical and latest first)
  if ($sortby = 'pricehilo') {
    $sql = mysqli_query($con,"SELECT * FROM products ORDER BY price DESC");
  }
  elseif ($sortby = 'pricelohi') {
    $sql = mysqli_query($con,"SELECT * FROM products ORDER BY price ASC");
  }
  elseif ($sortby = 'name') {
    $sql = mysqli_query($con,"SELECT * FROM products ORDER BY product_name");
  }
}

La page est index.php, et ce sont les liens dans le code HTML:

<p><a href="index.php?sortby=pricehilo">Price (Highest-Lowest)</a></p>
<p><a href="index.php?sortby=pricelohi">Price (Lowest-Highest)</a></p>
<p><a href="index.php?sortby=name">Alphabetical</a></p>

Lorsque je charge la page pour la première fois, tous mes produits sont triés par ID. Cependant, lorsque je clique sur un lien, les produits sont triés par prix plus élevé au plus bas. Si j'actualise la page en tant que juste index.php les produits demeurent classés par prix décroissant - la requête SQL c'est prenant, c'est que.

Comment puis-je résoudre ce problème?

  • Il n'y a pas de LIMITE clause dans votre requête, donc il n'y a pas de pagination. De sorte que vous pouvez simplement retourner un tableau et la poignée de la commande au niveau de l'application avec PHP, ou bien, même, avec un peu de javascript. Voir les grilles de données pour des exemples.
  • Maintenant la table est très simple avec seulement quelques produits, je suis donc en écho tout dans une seule page, mais merci pour l'astuce, je vais regarder à cela.
  • Le 'Tri' option sur le site web suivant est un de mes préférés exemples - utiliser une base de données pour créer une liste (li) des éléments, puis javascript se charge du reste. isotope.metafizzy.co . Aucun tri/filtrage des opérations nécessitent de toute autre interaction avec la base de données.
InformationsquelleAutor user2957365 | 2013-12-04