Page 1 sur 4
afficher les news de la + récente à la + ancienne
Posté : 26 oct. 2006, 17:38
par 2501gigi
Bijour à tous et à toutes.
Alors voila je voudrais comme le titre l'indique afficher les news de la + récente à la + ancienne mais je ne sais pas comment mis prendre tout d'abord quand je les enregistrent dans une table SQL dois je avec le texte faire un autre champs IDnews(par exemple) pour pouvoir quand je veut les affiches prendre l'id le plus grand pour l'afficher en premier et ainsi de suite ou alors je fais un champs DATEnews(re par exemple) pour le trie enfin la je pense que vous avez compris de la date la plus recente a la etc..
Merci d'éclairer ma lanterne car je vois plus rien.
PS : je pense que le champs date serait le mieux mais plus difficile a mettre en place pour le trie je parle.
Posté : 26 oct. 2006, 19:11
par Vikchill
Si tu as un champs incrémental pour tes news, le plus simple est effectivement de le prendre, puisque le plus récent est le plus grand d'entre eux.
PS: fait un effort de ponctuation, j'ai fait une apnée digne du Grand Bleu en te lisant.
Posté : 26 oct. 2006, 19:14
par Invité
Le plus simple est de créé un champ avec un nom comme "ID" que tu met en type "INT", et également dans extra tu le met en "auto_increment" (il faudra surement cocher la case primary keys pour que ca fonctionne). Ceci permet a ce champ d'augmenter de un pour chaque nouvelle insertion que tu fait.
Ensuite pour ta requete sql suffit de faire quelque chose de ce genre:
$req = 'SELECT * FROM news_tbl ORDER BY id_news DESC';
Il faut utiliser la fonction sql ORDER BY (par ordre de...) et rajouter DESC a la fin pour que ce soit l'ordre décroissant (plus grand au plus petit) sinon ne rien mettre.
Posté : 26 oct. 2006, 20:56
par 2501gigi
Ok merci je vais essayer et je vous tiend au courant
PS :desoler pour la ponctuation
Posté : 27 oct. 2006, 10:02
par Ryle
Personnellement je te recommande de modifier ta table pour ajouter l'identifiant ET la date. L'identifiant parce que c'est toujours mieux d'avoir une clé primaire dans sa table pour retrouver un enregistrement, la date parce que pour ton tri, on peut envisager que les news ne sont pas toutes postées chronologiquement (et pis pour des news, c'est toujours interessant de savoir de quand elle date

) ...
Pour l'usage, il dépend de ce que tu veux faire. Est ce que tu considères qu'il s'agit toujours des dernières nouvelles du moment (et donc la denière postée est la première à afficher) dans ce cas tu peux utiliser sans problème l'id pour le tri. Soit ce sont news de type événement (dans 3 jours y a ça, dans un mois y a ça, ...) et dans ce cas, un tri par date semble plus judicieux

Posté : 27 oct. 2006, 13:17
par 2501gigi
Salut ryle.
Bhein en faite se que je veut faire, c'est que se soit la derniere news entrée qui soit afficher en premiere.
Car pour l'autre style, dans trois jours ily aura tel truc ,je ferais une partie agenda.
Donc ma table doit comporter 4 champs un id (primaire, auto_increment)
un autre champs DATE, un titre de la news (TitreNews) et enfin un pour le texte (TexteNews).
Et je fais un trie par aport a l'id ,c'est a dire que par exemple, j'ai 5 news, donc avec un id de 1 à 5 et je veut que la 5 soit afficher en premier et ainsi de suite 4;3;2;1(décolage)

,c'est la que j'aimerais savoir comment mis prendre?
Merci pour votre aide.
Posté : 27 oct. 2006, 13:43
par Vikchill
Comme dit, si tu laisses la base gérer l'id, tu n'auras pas de soucis, ta requête ressemblera à ça:
Ainsi, il les triera par id décroissant.
Posté : 27 oct. 2006, 14:48
par 2501gigi
Je suis tout a fait d'accord avec sa, mais c'est pas parce que je les selectionnent dans l'ordre decroissant, que sa va me les afficher dans l'ordre de la plus recente a la plus ancinne, vous voyer se que je veut dire ou pas ou alors c'est moi qui m'exprime mal ou qui comprend pas et sa c'est possible.
Car je c'est que SELCT machin, c'est pour selectionner dans la base de donner, mais en faite c'est pour les afficher, c'est la que je me perd un peut(beaucoup).
En plus, pour l'affichage il faut pas que j'utilise une boucle ou un truc comme sa.
Puis ensuite sa sera pour afficher que les 5 dernieres (les 5 plus recente)
mais bon il faut deja que je les affiche dans l'ordre.
Posté : 27 oct. 2006, 14:57
par Ryle
L'ordre que tu précises dans ta requête correspond à l'ordre dans lequel il va te renvoyer les données (ce qui tombe assez bien dans un sens

)
Donc si tu fais une boucle classique avec un mysql_fetch_* pour lire le résultat de la requête, le premier élément que tu vas lire sera le premier retourné par ta base, et donc le dernier posté

Il te suffit donc de les afficher au fur et à mesure que tu les récupères pour les présenter dans l'ordre antechronologique (ou un nom comme ça)
Quant à la restriction aux derniers, voire même au dernier, tu peux la faire tout aussi simplement dans la requête, grace à la commande LIMIT, dans laquelle tu précises combien d'enregistrement tu veux lire :
Va trier ta table selon la colonne id descendant, et retourner 5 résultats à partir de l'enregistrement zéro (qui est donc grace à ton tri, l'id le plus récent)
Et puisque la base ne te retournera que 5 éléments, ta boucle s'arrêtera toute seule après les avoir affiché tous les cinq

Posté : 27 oct. 2006, 16:57
par 2501gigi
Oula, je suis lourd aujourd'hui, merci pour c'est precisions, mais vous me parlé de requete SQL pour afficher, mais en generale c'est pas un echo ou un print, car moi j'ai jamais utiliser, ou peut etre sans le savoir, une requete SQL pour afficher quelque chose et tandis que pour la boucle je pensais plutot a un do .... while ou un truc comme ca.
Voila mon corps et la mais mon esprit est ailleurs.
Désoler, mais avant de me lancer dans cette programmation, je prefere me renseigner a fond au risque de passer pour un boulet.
Posté : 27 oct. 2006, 17:15
par Vikchill
Tu as deux phases: tu cherches les données avec SQL, puis tes les affiches en HTML grâce à php qui lit les données que tu as cherché.
La requête SQL cherche les données. Tu peux les manipuler, les trier, etc... ta base de données te renvoie un jeu d'enregistrements correspondant à ta requête de sélection.
Ensuite, avec php, tu affiches ce jeu d'enregistrement. Plus efficace est ta requête, plus facilement se fait ton affichage. Dans ton cas, si tu tries les enregistrements avec SQL tu n'as plus à le faire avec php, il n'a plus qu'à les lire dans l'ordre où il les reçoit.
C'est ce que tu fais ici: tu cherches un jeu d'enregistrement que tu tries dans un certain ordre (par id décroissant), php lit ces enregistrements dans ce même ordre.
Posté : 27 oct. 2006, 17:57
par 2501gigi
Oui, sa je sais, je crois que je m'exprime mal ,se que je voudrais savoir, c'est comment les affiches?
Car si vous voulait je réussi en afficher qu'une.
Donc si tu fais une boucle classique avec un mysql_fetch_* pour lire le résultat de la requête, le premier élément que tu vas lire sera le premier retourné par ta base, et donc le dernier posté
Il te suffit donc de les afficher au fur et à mesure que tu les récupères pour les présenter dans l'ordre antechronologique (ou un nom comme ça)
C'est comment les afficher au fur et a mesure, à l'aide de quoi.
Faut il que j'utilise un truc comme ca :
J'ai l'impression que je suis pas clair.
Posté : 27 oct. 2006, 18:12
par Vikchill
Oui, c'est ça. Tiens, un peu de lecture, la partie 4 t'intéressera le plus
ici
Posté : 27 oct. 2006, 18:13
par Ajoloca
Bonjour,
Je ne sais pas si peux t'aider, mais des fois un exemple...
// Á ce stade la connexion à la base est déjà établie
// Construction de la requète
$req = 'SELECT * FROM news_tbl ORDER BY id_news DESC LIMIT 0,5';
// exécution de la requète
$res = mysql_query($req) or die('ERREUR SQL : ' . mysql_error());
//Récupération et affichage des résultats
while($row = mysql_fetch_array($res)){
// nom_chpX représente le nom du champ à afficher
echo $row['nom_chp1'] . ' - ' . $row['nom_chp2'] . ' - ' . $row['nom_chp3'] . '<br /> ';
}
Posté : 27 oct. 2006, 19:19
par 2501gigi
Bon merci pour votre aide moi, j'ai essayer sa car je ne comprend pas trop while.
<?php
$colname_RTnews = "1";
if (isset($_SERVER['IDTn'])) {
$colname_RTnews = (get_magic_quotes_gpc()) ? $_SERVER['IDTn'] : addslashes($_SERVER['IDTn']);
}
mysql_select_db($database_Debaseconnect, $Debaseconnect);
$query_RTnews = sprintf("SELECT * FROM tnews WHERE IDTn = %s ORDER BY IDTn DESC", $colname_RTnews);
$RTnews = mysql_query($query_RTnews, $Debaseconnect) or die(mysql_error());
$row_RTnews = mysql_fetch_assoc($RTnews);
$totalRows_RTnews = mysql_num_rows($RTnews);
?>
<?php for ($i=0;$i<$totalRows_RTnews;$i++)
{ ?>
<table width="617" border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="153" bgcolor="#FFFFFF"><div align="center"><?php echo $row_RTnews['DATEn']; ?></div></td>
<td width="394" bgcolor="#FFFFFF"><?php echo $row_RTnews['TITnew']; ?></td>
<td width="30" bgcolor="#FFFFFF"><div align="center">
<img src="../icones/images/Applications.gif" alt="Modifier" width="16" height="16"></div></td>
<td width="30" bgcolor="#FFFFFF"><div align="center"><img src="../icones/images/Recycle%20Bin%20(full).gif" alt="Supprimer" width="16" height="16"></div></td>
</tr>
</table>
<?php } ?>
Bon voila sa ne marche pas mais je ne s'ait pas pourquoi je suis sur que je suis pas loin(je peut me tromper).