Comment inverser le résultat d'une requête?[réglé] [SQL] - PHP - Programmation
Marsh Posté le 06-07-2003 à 18:13:54
Quand tu fais un tri, tu peux indiquer le sens
... ORDER BY colonne1 ASC, colonne2 DESC
Marsh Posté le 06-07-2003 à 18:17:10
Oui, il y a ça :
Code :
|
Je suis obligé ( me semble-t'il) de rester en descendant pour avoir par exemple les 4 derniers posts sur 10 dans le temps...
Ils seront donc dans l'ordre du plus récent au plus ancien...
Mais je voudrais les afficher du plus ancien au plus récent!
Marsh Posté le 06-07-2003 à 18:21:22
Ah, d'accord.
Là, il faudra surement bidouiller quelque chose en PHP. Par exemple, construire le html correspondant à chaque post dans une variable et faire un echo de ces variables dans l'ordre inverse.
Marsh Posté le 06-07-2003 à 18:22:41
mrBebert a écrit : Ah, d'accord. |
Ok... je vais essayer de trouver ! Merci.
Marsh Posté le 06-07-2003 à 18:24:11
Et dans cette fonction qui affiche dans l'ordre, il n'y en a pas une autre qui affiche dans l'ordre inverse ?
if ( $row = $db->sql_fetchrow($result) )...
Marsh Posté le 06-07-2003 à 18:29:51
Pas à ma connaissance. Sinon, tu as toujours la possibilité d'utiliser la fonction mysql_result()
Marsh Posté le 06-07-2003 à 19:25:42
OK, c'est réglé gràce à LIMIT :
Je savais pas qu'on pouvait mettre par ex : LIMIT 15,30 ce qui permet de ne garder que les résultats de 15 à 30 !
J'ai donc pu laisser en ascendant grâce à cette fonction
Et voilà !
Marsh Posté le 06-07-2003 à 19:28:31
Tiens oui, j'avais pas vu que tu récupérais d'abord le nombre total de posts
Marsh Posté le 06-07-2003 à 19:36:38
Voilà le code au final. Je me demande comment n'en faire qu'une requête au lieu de 2 ! Sachant qu'il y a besoin des résultats de la 1ère pour obtenir $depart et $fin, nécéssaire à la 2ème !
Code :
|
Marsh Posté le 06-07-2003 à 19:44:59
xofred a écrit : OK, c'est réglé gràce à LIMIT : |
LIMIT 15, 30 renvoie 30 résultats, en commencant par le numéro 15 (numérotation commencant à 0).
Marsh Posté le 06-07-2003 à 19:49:13
mrBebert a écrit : |
Non, tu te trompes... La preuve ça fonctionne chez moi sur le principe 15 à 30 !
Marsh Posté le 06-07-2003 à 19:50:37
Euh quoique t'as peut-être raison en fait, ça marche mais ..
EDIT : oui tu as raison, j'ai vérifié en remplaçant $fin par 100 sur un topic qui en compte peut-être 20, et effectivement ça ne change pas : il affiche de 15 à 100, mais comme il n'y en a que 20 je ne vois que de 15 à 20...
Je vais régler ça
Marsh Posté le 06-07-2003 à 20:12:01
mrBebert a écrit : Essaie avec LIMIT 15, 2 |
En effet
Bon j'ai modifié en conséquence. Une idée pour mettre le tout en une seule requête ? Sachant donc qu'il faut les deux variables issues de la requête 1 ( $post_depart et $nombre_post_a_afficher ) pour la 2ème...
Code :
|
Marsh Posté le 06-07-2003 à 20:14:23
Tu veux afficher un nombre de posts dépendant du nombre total de posts ?
Ce ne serait pas plus d'en afficher un nombre fixe ?
Marsh Posté le 06-07-2003 à 20:18:47
mrBebert a écrit : Tu veux afficher un nombre de posts dépendant du nombre total de posts ? |
Le but de cette modif est d'afficher(dans la fenêtre de réponse) le nombre exact de posts que l'on trouve à la dernière page (lorsqu'on lit le topic), afin de préserver la même 'image' quand on poste un nouveau message.
C'est ce qui est fait sur ce forum en fait...
Mais bon ça fait une requête plus, là!
Marsh Posté le 06-07-2003 à 20:24:41
Et le but est aussi d'afficher les posts dans l'ordre chronologique ascendant, mais pour ça il faut fixer un post de départ, mais ça ne peut être fait que par une variable...
Marsh Posté le 06-07-2003 à 20:28:26
J'imagine que tu ne connais pas le numéro de la dernière page
Marsh Posté le 06-07-2003 à 20:33:17
Non, il n'ya pas de numérotation par page, car le nombre de posts par page est modifiable... c'est $board_config['posts_per_page']
Marsh Posté le 06-07-2003 à 20:37:56
Le système qui était fait avant, c'était qu'il prenait les derniers posts du topic, donc en partant de la fin, en descendant et avec pour LIMIT le nombre maxi de posts par page...
Le truc qui me gêne c'était que ça s'affiche donc dans le mauvais ordre... D'où le but de ce topic !
Enfin là, j'ai la meeilleure solution, mais il y a une requête de plus...
Marsh Posté le 06-07-2003 à 20:45:48
Je pense qu'il est préférable de lire les résultats dans des variables puis de les afficher dans l'autre sens, au lieu de faire 2 requêtes
Marsh Posté le 06-07-2003 à 20:50:18
mrBebert a écrit : Je pense qu'il est préférable de lire les résultats dans des variables puis de les afficher dans l'autre sens, au lieu de faire 2 requêtes |
ah ... ouais bon... euh t'es sûr ? C'est pas vraiment facile en fait...
Tout à l'heure j'avais essayé de faire un
Code :
|
en remplacant $row[..] par $row[i][...] mais ça a foiré...
Tu crois que c'est une bonne idée ?
Marsh Posté le 06-07-2003 à 20:55:16
Sinon, tu utilises mysql_result() pour accéder comme tu veux au résultat, en le parcourant "à l'envers"
$count = mysql_num_rows($result);
for ($i = ($count-1) ; $i >= 0 ; $i--) {
// affichage i-ème post
...
...
}
Marsh Posté le 06-07-2003 à 21:00:52
mrBebert a écrit : Sinon, tu utilises mysql_result() pour accéder comme tu veux au résultat, en le parcourant "à l'envers" |
Oui, c'est ce à quoi je pensais.. Bon je m'y colle
Marsh Posté le 06-07-2003 à 18:07:10
Bon, il s'agit d'une requête pour le forum phpbb;
Quand on clique sur répondre à un message, on voti les précédents posts en dessous de la fenêtre de réponse, mais il sont dans l'ordre descendant. Or je voudrais dans l'ordre ascendant, et uniquement le nombre de post qui étaient présent sur la page pour faire propre !
Je suis arrivé à faire une modif pour avoir le bon nombre de posts, et les bon posts en plus, mais il s'affichent en ordre inversé. Comment faire ?
Merci d'avance !
En fait c'est pour arriver au même résultat que sur ce forum..
Message édité par xofred le 06-07-2003 à 19:24:18