PHP - Afficher données ordre inverse

doudou1st -  
doudou1st Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je cherche à créer un script php qui me permettrait de faire les choses suivantes :

- prendre les 30 dernières lignes d'une table,
- afficher ces 30 dernières lignes en commençant par la dernière.

Ceci, afin d'afficher les dernières entrées d'un catalogue en commençant par le dernier produit entré.

Les tuples utilisés sont :
- num,
- titre,
- description,
- prix.

Je me torture les méninges depuis un moment, mais je sèche.

Si quelqu'un a une idée, elle est la bienvenue.

Merci d'avance à tous.
A voir également:

9 réponses

Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
Quand il n'y a qu'une table comme ça le SQL ça se lit avec des mots français :

SELECT num,titre,description,prix
FROM base
ORDER BY num DESC
LIMIT 2000,30

Ca se lit : sélectionner les champs num,titre,description,prix classés sur "num" par ordre décroissant des 30 enregistrements après le 2000e de la table base.

ORDER BY = classer par ordre
ASC = croissant
DESC = décroissant

LIMIT A,B = ne prendre que les B enregistrements après le n°A

Conclusion : dans la requee ci-dessus tu as déjà sélectionné les n-uplets en partant du bas, pas besoin de les "retourner".

Tu noteras au passage que tu as appelé ta table base mais ce n'est pas judicieux, ce qu'on met après un FROM n'est jamais une base mais une table.
* Une table c'est ce que l'on représente par un tableau avec, en colonnes les attributs (dits aussi les champs, ils sont typés) et en ligne les n-uplets (c-à-d les enregistrements : une table vide par exemple n'a aucune "ligne").
* La base c'est ce qui "contient" une ou plusieurs tables. Elle a un nom également, mais il ne faut pas faire l'amalgame entre une base et une table.
* A titre d'exemple je peux enregistrer le prix au kilo de différents légumes et les prénoms de mes collègues de boulot dans la même base, mais pas dans la même table, ça n'a pas de sens.
3
doudou1st Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup pour vos réponses. Je patauge encore pas mal sur certaines fonctions dès qu'elles sortent de l'ordinaire.

Sans vouloir trop en demander, quelqu'un aurait-il le courage malgré l'heure tardive de me faire le pas à pas ?
Je suppose que ma base à 2000 lignes.


Je commence le script :

mysql_connect("$hote_mysql","$user_mysql","$passwd_mysql");
mysql_select_db ("$base_mysql");

$req="select num,titre,description,prix from base order by num DESC 2000,30";

........ et là je commence déjà à me prendre les pieds dans le tapis.

Quelqu'un a-t-il la suite ?
1
Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
Pourquoi avec PHP ?
Le plus simple serait d'utiliser la clause ORDER BY dans la requête SQL.

Le faire avec PHP imposerait de tout stocker en mémoire volatile voire persistante pour reprendre ensuite le chemin inverse. Bonjour les performances.
0
Utilisateur anonyme
 
Il ce fait tard mais j'ai deja fait qqe chose comme ca ...

Une fois que ton tableau est trié tu l'inverse (asort($tableau) ou arsort($tableau))
tu fais une bouble de 0 à n pour l'affichage

1,2,3,4,5,6,7,8,9,10 inversé
10,9,8,7,6,5,4,3,2,1

foreach ($tableau as $cle=>$n) //$n=5
{
J'affiche
}

10,9,8,7,6,5

T'en pense quoi ?
0
Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
Je sais pas les autres, mais moi j'en pense que, bien que parfaitement fonctionnel, sélectionner cent champs de mille n-uplets de cette manière (soyons fous, disons que ce sont des BLOB qui enregistrent des images de 2Mo), ça sera particulièrement peu performant et consommateur de ressources.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
L'énoncé du probleme est un script en PHP, et il n'y a pas la problematique de poid, taille, performance.

Maintenant les conseils d'expert sont toujours les bienvenue même si parfois on ne les comprend pas toujours avant quelque nuit blanche ;)
0
Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
Je suis pas expert du tout, mais compliquer ainsi le problème alors que les SGBD ont un truc tout prêt pour ça, je trouve que c'est dommage.

Mais c'est peut-être pas possible d'utiliser ORDER BY dans le cas présent, on peut tout imaginer :)
0
Yoan Messages postés 11795 Date d'inscription   Statut Modérateur Dernière intervention   2 331
 
C'est la suite du code PHP qui te fait défaut ou la requête SQL ?
0
doudou1st Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   1
 
En fait, je ne suis déjà pas très sûr de la requête, même si je pense qu'elle ne doit pas être loin de la vérité.

Et ce qui me pose problème dans la suite du code, c'est tout simplement comment extraire les données de ma requête pour leur mettre la tête en bas !
0
zoby44 Messages postés 818 Date d'inscription   Statut Membre Dernière intervention   199
 
Salut, ta requête devrais donner un truc comme ça :
$sql = mysql_query('SELECT * FROM base ORDER BY num LIMIT 0,30');
WHILE($data = mysql_fetch_array($sql)) {
      echo $data['titre'];
      echo $data['description'];
      ...
}

La ça devrais t'afficher les 30 dernières entrée en commençant par la fin.
Edit :oops désolé, ORDER BY num DESC sinon ça commence par le début.
0
doudou1st Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup Yoan pour ces explications.

J'ai effectivement écrit "base" à la place de "table", grossière erreur de ma part, surtout que je pensais bien à "table".

Je viens de tester de nouveau mon script et je crois avoir trouvé d'où vient l'erreur qui me perturbe depuis le début : la colonne "num" n'est pas en "INT", ce qui me donne un tri un peu délirant lors de ma sélection...

Je vais me pencher plus précisément sur cette erreur.

En tout cas, merci Yoan pour tes explications très claires, et merci également à tous les autres d'avoir pris un peu de leur temps pour se pencher sur mes erreurs !
0