Page 1 sur 1

Boucle 'tant que' ... j'y arrive pas !

Posté : 04 sept. 2007, 13:29
par Sebe
Salut,

J'aimerai sortir sur ma page les 5 derniers enregistrements stockés dans une base de données. Je n'ai aucun problème pour tout lister mais comment dois-je faire pour ne voir apparaître que les X derniers enregistrements ?

J'ai pensé faire un espèce de compteur mais c'est un peu (beaucoup) foireux :
<?php
$compteur = 0;

if ( count($last) > 0 && count($compteur) < 5 ){
	foreach ($last as $lastlist){
		$compteur++;
?>
<td><div align="right">
			<?php
			setlocale(LC_TIME, "fr"); 
			$date = strftime('%a %d %b %Y', $lastlist->days);
			$heure = date('H\Hi', $lastlist->days);
			echo $date . ' ' . $heure;
			?></div>
		</td>
		<td><div align="right"><?php echo $lastlist->hits; ?></div></td>
	</tr>
</td>

<?php 
		} }else{
		echo '<td class=" ">' . 'Pas de message encore enregistré !' . '</td>'; 
	}
?>
Quelqu'un peut)il me remettre sur la bonne voie ?

Merci

Posté : 04 sept. 2007, 13:43
par sadeq
C'est quoi la structure de ta table? car on peut faire ça par la requête SQL de sélection sans se prendre la tête à compter les boucles en php. Mais celà dépond de la structure de ta table et de si tu as une clé primaire autoincrémentée ou un champ date, critère sur lequel l'on peut s'appuyer pour reconnaître les derniers enregistrements. Il suffit alors de trier la sélection par ordre décroissant de ce critère et limiter la sortie à X premiers enregistrements.

Sinon la syntaxe générique pour ne sélectionner que X premiers enregistrements est la suivante:

Code : Tout sélectionner

SELECT * FROM table LIMIT X
où X est un nombre.

Moralité: "Les derniers deviennent premiers et les premiers deviennent derniers" grâce au tri.

Posté : 04 sept. 2007, 13:43
par Gaap

Code : Tout sélectionner

count($compteur)
tu fais un count (utilisation pour les tableaux) sur une variable qui est un chiffre ta condition n'est jamais vrai

Code : Tout sélectionner

$compteur <5
de plus tu mets ton foreach aprés ton if du coup

Code : Tout sélectionner

&& count($compteur) < 5
ne sert a rien en plus d'être faux

si je comprends bien ce que tu veux faire il faudrait que ta condition de vérification de $compteur soit sous ton foreach comme cela a chaque boucle on vérifie ta condition si elle est juste tu fais un break

Posté : 04 sept. 2007, 14:44
par Sebe
J'ai pris la 1er proposition qui me paraissait plus facile à mettre en oeuvre vu le nombre beaucoup plus élevé du nombre de ligne de code ... voici ce que cela donne :
$count = 5;
$query = "SELECT m.id as subjectid, m.name, m.time as days, m.subject, m.catid, m.hits, cc.name as catname, m.userid"
		. "\n FROM #__fb_messages AS m"
		. "\n INNER JOIN #__fb_categories AS cc ON cc.id = m.catid"
		. "\n ORDER BY days DESC"
		. "\n LIMIT $count"
		;
Un grand merci à vous 2