pagination de plusieurs requète sql

Petit nouveau ! | 7 Messages

27 nov. 2013, 09:46

Bonjour a tous ,
Aujourdui je vaudrais corser un peu mon code d'hier ( pour ce qui ont suivi ).

Je voudrais faire une pagination des résultats de 3 requètes sql aléatoire ( en faite j'ai dans ma table sql une colonne positions avec comme valeurs soit 1 , 2 ou 3) .

En gros :
REQUETE A (position = 1) : résultat sur x nombre de pages
REQUETE B (position = 2) : résultat sur x nombre de pages a la suite de requète A
REQUETE C (position = 3) : résultat sur x nombre de pages a la suite de requète B

Il faudra que je puisse inserer les titres de mes requetes(requete A, requete B, requette C) avant les résultats


je met mon code d'hier ou la pagination fonctionne parfaitement sur une seul requete aléatoire :

Code : Tout sélectionner

<?php session_start(); if (!isset($_SESSION['key'])) { $_SESSION['key'] = rand(1, 1000); } if ((isset($_GET['action'])) && ($_GET['action'] == 'logout')) { $_SESSION = array(); session_destroy(); session_start(); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Livre d'or</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <style type="text/css"> form, .pages { text-align:center; } </style> </head> <p class="pages"> <p><a href="test4.php?action=logout" title="Déconnexion">Se déconnecter</a></p> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=dechetterie_npdc' , 'root' , '' ) ; } catch (Exception $e) { die('Erreur :' .$e->getMessage()); } // --------------- Étape 2 ----------------- // On écrit les liens vers chacune des pages // ----------------------------------------- // On met dans une variable le nombre de messages qu'on veut par page $nombreDeMessagesParPage = 4; // Essayez de changer ce nombre pour voir :o) // On récupère le nombre total de messages $retour = $bdd->query('SELECT COUNT(*) AS nb_messages FROM npdc'); $donnees = $retour->fetch(); $totalDesMessages = $donnees['nb_messages']; // On calcule le nombre de pages à créer $nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage); // Puis on fait une boucle pour écrire les liens vers chacune des pages echo 'Page : '; for ($i = 1 ; $i <= $nombreDePages ; $i++) { echo '<a href="test4.php?page=' . $i . '">' . $i . '</a> '; } ?> </p> <?php // --------------- Étape 3 --------------- // Maintenant, on va afficher les messages // --------------------------------------- if (isset($_GET['page'])) { $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4) } else // La variable n'existe pas, c'est la première fois qu'on charge la page { $page = 1; // On se met sur la page 1 (par défaut) } // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; $reponse = $bdd->query('SELECT * FROM npdc WHERE POSITION=1 ORDER BY RAND(' . $_SESSION['key'] . ') LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage); while ($donnees = $reponse->fetch()) { echo '<p><strong>' . $donnees['adresse'] . '</strong> a écrit :<br />' . $donnees['ville'] . '</p>'; } ?> </body> </html>
Voila j'ai beaucoup chercher sur le net hier après-midi et soir , j'ai pas trouvé ce que je voulais , il y a pas mal d'info pour 1 seul requete mais pas plusieurs , apparament c'est assez complexe .

Moi je débute , je me lance quelque defis pour apprendre .

En vous remerciant.

ViPHP
xTG
ViPHP | 7331 Messages

27 nov. 2013, 11:17

Moi je vois une solution mais qui est pas top.
A savoir enlever le LIMIT et faire trois requêtes reliées par UNION.
Ainsi tu auras bien tes trois requêtes à la suite avec le système de rand.

Mais par contre cela te récupère toute le contenu...

Petit nouveau ! | 7 Messages

27 nov. 2013, 12:33

Je pense que ca ne marchera pas , mon LIMIT sert a me mettre que 4 lignes par pages , si je l'enleve il n'y aura plus de pagination?

L'idée ca serait de mettre les résultats des 3 requettes dans le fetch() de :

Code : Tout sélectionner

while ($donnees = $reponse->fetch())
Dans ce fetch fictif on aurait alors les résultats des 3 requettes les unes après les autres et je pourais les afficher comme je veus .
Mais j'arrive pas a faire la ligne de code qui le permet.
Je sais pas ce que vous en penser?

ViPHP
xTG
ViPHP | 7331 Messages

27 nov. 2013, 14:03

En suivant ce principe tu peux afficher les 4 de la requête 1 puis les 4 de la requête 2 puis ... dans la même page.
Si ce comportement te convient c'est possible.
Tu fais tes trois requêtes et tu merges les array résultants. L'array résultant te servira pour ta boucle d'affichage.

Après moi j'avais compris que tu voulais tous les résultats de la requête 2 après ceux de la requête 1 (donc potentiellement à partir de la page X).

Petit nouveau ! | 7 Messages

27 nov. 2013, 15:40

Je ne veus pas tous sur la meme page , mais bien les resultats les uns apres les autres sur plusieurs pages.