Problème pour afficher une double requête avec PHP/MySQL
Résolu
polarbird
Messages postés
104
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir,
Je voudrais afficher correctement une double requête en PHP/MySQL. En fait, il s'agit d'afficher des articles selon leur date. Exemple : 2014 > 12 > article.
Pour le moment, mon code m'affiche deux fois la même année (2014 en l'occurence) alors que j'aimerais qu'il groupe les deux et qu'il affiche une seule fois l'année 2014 en groupant tous les articles de cette année parus sur différents mois.
Voilà mon code actuel :
Voilà le résultat :

Voilà ma base de données :

Je suis sûr qu'il s'agit de quelque chose de simple mais je galère depuis un moment.
Par avance je vous remercie de votre aide.
Cordialement,
polarbird
Je voudrais afficher correctement une double requête en PHP/MySQL. En fait, il s'agit d'afficher des articles selon leur date. Exemple : 2014 > 12 > article.
Pour le moment, mon code m'affiche deux fois la même année (2014 en l'occurence) alors que j'aimerais qu'il groupe les deux et qu'il affiche une seule fois l'année 2014 en groupant tous les articles de cette année parus sur différents mois.
Voilà mon code actuel :
<table> <?php $req15 = $bdd->query('SELECT * FROM articles ORDER BY yr ASC LIMIT 10'); while($req25 = $req15->fetch()) { ?> <tr> <th colspan="2"><?php echo $req25['yr']; ?></th> </tr> <?php $req35 = $bdd->query('SELECT * FROM articles WHERE yr="'.$req25['yr'].'" ORDER BY mo ASC'); while($req45 = $req35->fetch()) { ?> <tr> <th><?php echo $req45['mo']; ?></th> </tr> <?php $req55 = $bdd->query('SELECT * FROM articles WHERE yr="'.$req25['yr'].'" AND mo="'.$req45['mo'].'" ORDER BY dy ASC'); while($req65 = $req55->fetch()) { ?> <tr> <td> <a href="#" rel="nofollow noopener noreferrer" target="_blank"> <?php echo $req65['titre']; ?> </a> </td> </tr> <?php } } } $req15->closeCursor(); $req35->closeCursor(); $req55->closeCursor(); ?>
Voilà le résultat :

Voilà ma base de données :

Je suis sûr qu'il s'agit de quelque chose de simple mais je galère depuis un moment.
Par avance je vous remercie de votre aide.
Cordialement,
polarbird
A voir également:
- Problème pour afficher une double requête avec PHP/MySQL
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
- Afficher appdata - Guide
3 réponses
Bonjour,
oulaaa....
Pas besoin de faire x requêtes ....
Une seule suffit .... ensuite il faut jouer avec des IF/else pour afficher ce que tu désires.
Par exemple
Cordialement,
Jordane
oulaaa....
Pas besoin de faire x requêtes ....
Une seule suffit .... ensuite il faut jouer avec des IF/else pour afficher ce que tu désires.
Par exemple
echo "<table>"; $result = $bdd->query('SELECT * FROM articles ORDER BY yr ASC, mo ASC LIMIT 10'); $annee_prec = NULL; $mo_prec =NULL; while($rows = $result->fetch()){ $annee = $rows['yr']; $mo = $rows['mo']; $titre = $rows['titre']; if($annee != $annee_prec){ echo "<tr><th colspan='2'>$annee</th></tr>"; } if($mo != $mo_prec){ echo "<tr> <th>$mo</th> </tr>"; } echo "<tr> <td> <a href='#' rel="nofollow noopener noreferrer" target="_blank" rel=\"nofollow noopener noreferrer\" target=\"_blank\">$titre</a> </td> </tr>"; $mo_prec = $mo; $annee_prec = $annee; } echo "</table>"; $req55->closeCursor(); ?>
Cordialement,
Jordane
Okay merci. Juste une dernière question : je voudrais organiser cela en liste, l'utilisation du tableau était juste pour faire plus simple pour la présentation.Je voudrais présenter ça comme cela : https://codepen.io/anon/pen/dWzORR . Simplement avec ta requête je n'arrive pas à le faire, il y a toujours un problème. Voilà mon code et voilà ce que cela me donne.
Cela me donne :
Je galère depuis 3 heures et malgré mes recherches je ne trouve pas de solution :/
<?php $result = $bdd->query('SELECT * FROM articles ORDER BY yr ASC, mo ASC LIMIT 10'); $annee_prec = null; $mo_prec = null; while($rows = $result->fetch()){ $annee = $rows['yr']; $mo = $rows['mo']; $titre = $rows['titre']; if($annee != $annee_prec){ ?> <li><?php echo $annee; ?> <?php } if($mo != $mo_prec){ ?> <?php echo $mo; ?> <?php } if($mo != $mo_prec && $annee != $annee_prec){ ?> <a href="#" rel="nofollow noopener noreferrer" target="_blank"><?php echo $titre; ?></a> <?php echo '</li>'; $mo_prec = $mo; $annee_prec = $annee; } } $result->closeCursor(); ?>
Cela me donne :
<li>201411<a href="#" rel="nofollow noopener noreferrer" target="_blank">Manifestations en Roumanie</a> </li>12<li>201510<a href="#" rel="nofollow noopener noreferrer" target="_blank">q</a> </li><li>201703<a href="#" rel="nofollow noopener noreferrer" target="_blank">qaqaq</a> </li>
Je galère depuis 3 heures et malgré mes recherches je ne trouve pas de solution :/
Bonsoir,
1 - Évite d'ouvrir/fermer des balises PHP partout .... c'est franchement illisible !
Compare ton code avec mon précédent (ou le nouveau ci-dessous) pour voir la différence !
2 - Pour poster du code sur le forum.. merci d'indiquer le LANGAGE dans les balises de code histoire d'avoir la couleur ( explications ICI : Utilisation_des_balises_de_code )
3 - Tu as légèrement oublié les balises <UL> dans ton code ...
4 - Changeons la façon de faire....
On va retravailler le résultat de ta requête pour en faire un array associatif beaucoup plus facile à utiliser....
Essaye ça :
1 - Évite d'ouvrir/fermer des balises PHP partout .... c'est franchement illisible !
Compare ton code avec mon précédent (ou le nouveau ci-dessous) pour voir la différence !
2 - Pour poster du code sur le forum.. merci d'indiquer le LANGAGE dans les balises de code histoire d'avoir la couleur ( explications ICI : Utilisation_des_balises_de_code )
3 - Tu as légèrement oublié les balises <UL> dans ton code ...
4 - Changeons la façon de faire....
On va retravailler le résultat de ta requête pour en faire un array associatif beaucoup plus facile à utiliser....
Essaye ça :
<?php $result = $bdd->query('SELECT * FROM articles ORDER BY yr ASC, mo ASC LIMIT 10'); $arr_liste = array(); while($rows = $result->fetch()){ $annee = $rows['yr']; $mo = $rows['mo']; $titre = $rows['titre']; $arr_liste[$annee][$mo][]=$titre; } $result->closeCursor(); echo "<ul>"; foreach($arr_liste as $A=>$M){ echo "<li>" . $A; echo "<ul>"; foreach($M as $Mkey=>$T){ echo "<li>".$Mkey; echo "<ul>"; foreach($T as $Titre){ echo '<li><a href="#" rel="nofollow noopener noreferrer" target="_blank">'.$Titre.'</a></li>'; } echo "</ul>"; echo "</li>"; } echo "</ul>"; echo "</li>"; } echo "</ul>"; ?>
Merci beaucoup pour ta réponse, elle m'a bien aidée ! C'est exactement ça ! Par contre à quoi sert le LIMIT 10 à la ligne 3-4 s'il te plaît ? Je veux afficher des articles et par la suite, il se peutr qu'il y en ait pas mal, cela ne va pas gêner tu penses ?
Cordialement,
polarbird
A toi d'adapter à tes besoins. ..