PHP - Afficher données ordre inverse
doudou1st
-
doudou1st Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- PHP - Afficher données ordre inverse
- Excel trier par ordre croissant chiffre - Guide
- Annuaire inversé - Guide
- Ecran inversé - Guide
- Annuaire inversé suisse ✓ - Forum Mail
- Annuaire inverse espagne - Forum Mobile
9 réponses
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.
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.
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 ?
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 ?
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.
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.
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ;)
Maintenant les conseils d'expert sont toujours les bienvenue même si parfois on ne les comprend pas toujours avant quelque nuit blanche ;)
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 !
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 !
Salut, ta requête devrais donner un truc comme ça :
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.
$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.
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 !
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 !