Le tri de mes colonnes ne s'effectue pas correctement
Résolu/Ferméflexi2202 Messages postés 3803 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 1 février 2025 - 9 avril 2023 à 23:17
- Le tri de mes colonnes ne s'effectue pas correctement
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Comment faire des colonnes sur word - Guide
- Logiciel tri photo gratuit - Guide
- Inverser deux colonnes excel - Guide
- En cours de traitement sur le site de tri local ✓ - Forum Consommation & Internet
3 réponses
8 avril 2023 à 17:33
Si tu parles de cette requête :
$sql = "SELECT a.post_title ,a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as intro,d.meta_value as espace, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY post_date DESC LIMIT :premier, :parpage ; "; $sort = "date_desc"; if (isset($_GET['sort'])) { $sort = $_GET['sort']; } if ($sort == "date_asc") { $sql .= " ORDER BY a.post_date ASC"; } else if ($sort == "date_desc") { $sql .= " ORDER BY a.post_date DESC"; }
Je constate que tu ajouter du contenu à ta chaine après le ;
Essayes d'afficher la requête SQL réellement compilée avec par exemple
echo $sql;
Car il me semble que tu obtiendra un truc du genre :
SELECT ... FROM ... WHERE ... ORDER BT post_date DESC LIMIT .. ; ORDER BY a.postdate DESC
Ou un truc du genre.
8 avril 2023 à 17:37
merci pour la reponse
oui en effet je parle bien de cette requete et lorsque je retire ce morceau de code jen'ai plus de pagination mais le tri de chaque colonne s'effectue bien
ORDER BY post_date DESC LIMIT :premier, :parpage ;
8 avril 2023 à 20:24
Bonjour,
Il faut bien retirer cette ligne de ton code
ORDER BY post_date DESC LIMIT :premier, :parpage ; ";
Puis, après tous tes IF pour choisir le tri .. reconcaténer avec le limit
$sql .= " LIMIT :premier, :parpage "; // On prépare la requête $query = $bdd->prepare($sql);
Modifié le 9 avril 2023 à 10:52
Bonjour Jordane,
Merci pour ton aide, mais j'ai déjà appliqué cette solution.
Malheureusement, cela ne fonctionne pas.
Lorsque je suis sur la première page, tout fonctionne bien et le tri de chaque colonne s'effectue correctement.
Mais dès que je passe à la page 2 ou suivantes, le tri est inactif, sauf pour la date ou cela fonctionne sur toutes les pages
voici ma requete
// Requête $sql = "SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish'"; $sort = "date_desc"; if (isset($_GET['sort'])) { $sort = $_GET['sort']; } if ($sort == "date_asc") { $sql .= " ORDER BY a.post_date ASC"; } else if ($sort == "date_desc") { $sql .= " ORDER BY a.post_date DESC"; } else if ($sort == "nbre_prises_asc") { $sql .= " ORDER BY CAST(d.meta_value AS UNSIGNED) ASC"; // Tri par nombre de prises (converti en nombre) } else if ($sort == "nbre_prises_desc") { $sql .= " ORDER BY d.meta_value+0 DESC"; } else if ($sort == "titre_asc") { $sql .= " ORDER BY c.meta_value ASC"; // Tri par titre (en ordre alphabétique) } else if ($sort == "titre_desc") { $sql .= " ORDER BY c.meta_value DESC"; } else if ($sort == "auteur_asc") { $sql .= " ORDER BY u.display_name ASC"; } else if ($sort == "auteur_desc") { $sql .= " ORDER BY u.display_name DESC"; } $sql .= " LIMIT :premier, :parpage"; // On prépare la requête $query = $bdd->prepare($sql); $query->bindValue(':premier', $premier, PDO::PARAM_INT); $query->bindValue(':parpage', $parPage, PDO::PARAM_INT); // On exécute $query->execute();
et voici pour rappel comment sont construis le tri pour chaque colonne
<!-- titre des colonnes de pagination --> <div class="container" style=" max-width: 100%;margin:auto;"> <div class="row"> <div class="col-md-1" style="background: green;"> <h5 class="title text-center">Lien</h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=date_asc" <?php echo ($sort == "date_asc") ? "selected" : ""; ?>>Trier par date (ascendant)</option> <option value="?sort=date_desc" <?php echo ($sort == "date_desc") ? "selected" : ""; ?>>Trier par date (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=nbre_prises_asc" <?php echo ($sort == "nbre_prises_asc") ? "selected" : ""; ?>>Trier par Nbre de prises (ascendant)</option> <option value="?sort=nbre_prises_desc" <?php echo ($sort == "nbre_prises_desc") ? "selected" : ""; ?>>Trier par Nbre de prises (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=titre_asc" <?php echo ($sort == "titre_asc") ? "selected" : ""; ?>>Trier par titre (ascendant)</option> <option value="?sort=titre_desc" <?php echo ($sort == "titre_desc") ? "selected" : ""; ?>>Trier par titre (descendant)</option> </select> </div> </h5> </div> <div class="col-md-2" style="background: green;"> <h5 class="title text-center"> <div> <select onchange="window.location.href=this.value;"> <option value="" <?php echo ($sort == "") ? "selected" : ""; ?>>Non trié</option> <option value="?sort=auteur_asc" <?php echo ($sort == "auteur_asc") ? "selected" : ""; ?>>Trier par pseudo (ascendant)</option> <option value="?sort=auteur_desc" <?php echo ($sort == "auteur_desc") ? "selected" : ""; ?>>Trier par pseudo(descendant)</option> </select> </div> </h5> </div> </div> </div>
9 avril 2023 à 14:52
Fais donc un écho de ta variable SQL pour voir la requête qu'elle te retourne (juste avant le execute) et teste la directement dans ton PHPmyadmin pour voir si elle retourne le résultat escompté..
9 avril 2023 à 18:17
Merci pour le retour jordane
voici ce que me donne l'echo
SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY a.post_date DESC LIMIT 10;
j'ai executer ce code dans phpmyadmin
la requete est sortie exacte
9 avril 2023 à 20:24
Et si tu essaies de trier sur autre chose ... qu'obtiens tu comme requête ?
9 avril 2023 à 21:11
Merci pour l'aide
*si j'essaye de trier par exemple le nombre de prise voici ce que j'ai en restant sur la premiere page ou le tri s'effectue normalement
SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY CAST(d.meta_value AS UNSIGNED) ASC LIMIT :premier, :parpage
lorsque je bascule sur la deuxieme page voici le resultat de l'echo pour le nombre de prise
SELECT a.post_title, a.post_date, a.guid, b.meta_key, b.meta_value as level, c.meta_value as titre, d.meta_value as nbre_prises, u.display_name FROM wp_posts a LEFT JOIN wp_postmeta b ON a.ID = b.post_id LEFT JOIN wp_postmeta c ON a.ID = c.post_id LEFT JOIN wp_postmeta d ON a.ID = d.post_id LEFT JOIN wp_users u ON a.post_author = u.ID WHERE b.meta_key = 'date' AND c.meta_key = 'titre' AND d.meta_key = 'total_des_prises' AND a.post_status = 'publish' ORDER BY a.post_date DESC LIMIT :premier, :parpage
on voir qu 'il est revenu a post_date pour le tri
9 avril 2023 à 21:22
Cela veut dire, que quand tu changes de page, tu ne renvoies pas la colonne sur laquelle tu dois trier....
Il faut donc tu que tu rajoutes ta variable sort également dans les boutons qui te servent à changer de page.