2009-05-13 6 views
0

Je veux faire un simple système de nouvelles utilisant PHP et MySQL, maintenant j'ai un système de publication et de lecture, mais il n'y a qu'un problème, je veux qu'il montre les 10 dernières nouvelles, mais à la place il montre les 10 nouvelles les plus anciennes.

Ma question est la suivante: y a-t-il un moyen de faire en sorte que MySQL renvoie les résultats du bas d'une table ou dois-je d'abord obtenir le nombre de messages et les limiter aux 10 derniers?

est ici l'insert (titre et le texte est échappèrent et le temps est le temps(), l'affiche est pas encore fait):Rendre MySQL retourner la table en arrière

mysql_query("INSERT INTO news (title, poster, text, time) VALUES ('$newstitle', '1', '$newstext', '$time')") or die(mysql_error()); 


Et retrive il (addnews echos il):

$myqr = mysql_query('SELECT * FROM news LIMIT 10') or die("Error running news query: ". mysql_error()); 
while($myres = mysql_fetch_array($myqr)) 
{ 
addnews($myres['id'], $myres['title'], "admin", date('l jS F Y - H:i:s', $myres['time']), $myres['text']); 
} 

Donc, bref: je veux lire la base de données à l'envers, est-ce possible?

+0

Um ... COMMANDER? – Matt

Répondre

11

Vérifiez la clause ORDER BY. Il vous permet de trier les lignes par colonne dans l'ordre croissant ou décroissant. La requête suivante renvoie 10 nouvelles, triées par heure dans l'ordre décroissant.

SELECT * FROM news ORDER BY time DESC LIMIT 10 
+0

Merci fonctionne parfaitement – user106546

2

Simple, ajoutez simplement une clause "ORDER BY" à votre SQL, par ex.

SELECT * FROM news ORDER BY time DESC LIMIT 10 
+0

Si vous modifiez 'time' plus tard, alors le tri d'identification ne montrera pas le dernier message de nouvelles ... – Ropstah

1

Vous devez modifier votre requête pour trier par date de création. quelque chose comme

SELECT * FROM news order by time DESC LIMIT 10 

devrait fonctionner pour vous. Je pense qu'il vaut la peine de noter que si vous ne spécifiez pas une clause Order by, l'ordre dans lequel les résultats sont renvoyés n'est pas garanti. À l'heure actuelle, il se trouve que vous les avez commandés au moment où ils ont été insérés, mais vous ne pouvez pas supposer que ce sera toujours le cas.

+1

S'il a une colonne d'identité sur la table, c'est en fait probablement de retour avec l'ID (ascendant) comme l'ordre implicite par clause. Mais oui, ce n'est pas garanti. – Jeff

0

En supposant que id est la clé primaire:

SELECT * FROM new ORDER BY id DESC LIMIT 10 
0

Utilisez une clause ORDER BY.

+0

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. – Jon

+0

Il _precisely_ fournit une réponse à la question. –

+0

sans * aucune * explication quant à la façon de mettre en œuvre la solution ... – Jon

0

Pourriez-vous pas simplement Trier par Heure décroissant avant LIMIT 10?

+0

WoW cinq autres messages et trois bump ups dans le temps qu'il a fallu pour taper ... – Nate

+0

Je sais, c'était mon premier post ici et j'ai été choqué par la rapidité d'obtenir une réponse. – user106546

0

utilisation

SELECT * FROM news ORDER BY time DESC LIMIT 10 
0

Vous pouvez également utiliser

SELECT TOP 10 FROM news ORDER BY time DESC 

je crois. Vous ne savez pas si la clause 'top' est uniquement SQL Server.

Questions connexes