|
| Maurice Guidicelli | Posté le 02/11/2007 @ 05:57 |
Petit astucien
10 Messages
| ça y est, je me lance dans les tableaux.... Je veux trier une table de BDD. J'ai fait le sript suivant:pour une table n'ayant que 2 champs : "nom" et "nbhits" <?php // Connexion requete1 = "SELECT nom FROM table ORDER BY nbhits "; $resultats = mysql_query($requete1); while ($enreg=mysql_fetch_array($resultats)) { $nom1=$enreg["nom"]; } echo $nom1; ?> J'obtiens bien le dernier nom ( ayant le plus grand nbhits). C'est normal puisque le pointeur termine sur le dernier élément, la dernière ligne... Mais je voudrais aussi L'AVANT DERNIER élément, l'avant dernier nom... et là, je bute !!! J'ai découvert qu'il existe la fonction PREV()... Mais je ne sais quoi mettre dans la parenthèse. Je pense le nom du tableau ! Mais où est-il ce foutu nom de tableau ????  Merci pour une réponse !
|
| |
| |
| Publicité |
|
|
| cekica | Posté le 02/11/2007 à 13:54 |
Petit astucien
492 Messages
| J'ai pas compris ce que tu voulait faire .Un peu plus de detail nous aiderait, Sinon tu peut trier les elements d'une requete sql par exemple : $requete1 = "SELECT nom FROM table ORDER BY nbhits LIMIT ASC 0,2 ;
ce qui donnera les deux premiers resultats il me semble |
| |
|
| Maurice Guidicelli | Posté le 02/11/2007 à 14:58 |
Petit astucien
10 Messages
| Pour cekica : C'est simple.... Si dans ma table de la BDD j'ai: nom nbhits
Momo 25 Toto 32 Coco 18 Je veux pouvoir afficher sur une page php : " C'est Toto qui a gagné le pompon, suivi de Momo puis de Coco !". Mais pour des choses plus sérieuses que cet exemple..... |
| |
|
| stef59280 | Posté le 02/11/2007 à 15:36 |
Petit astucien
344 Messages
| Salut pourquoi tu ne fais pas ça ? requete1 = "SELECT nom FROM table ORDER BY nbhits DESC "; ? |
| |
|
| Maurice Guidicelli | Posté le 03/11/2007 à 01:03 |
Petit astucien
10 Messages
| Oui, au lieu d'être croissant, le tri sera décroissant.... Mon problème n'est pas là ! Ce problème est : "comment faire pour récupérer les noms ORDONNÉS depuis la table Mysql afin de pouvoir ENSUITE les faire afficher ( a l'aide d' une page php) toujours de manière ordonnée ( croissante ou décroissante...) Bref: Regarder les noms par ordre croissant dans une table Mysql, je sais faire ! Mais que les visiteurs de mon site puissent voir ces mêmes noms ORDONNÉS sur l'écran de leur moniteur, à des kilomètres de mon domicile, ça, je sais pas !!! Qui peut m'aider ? |
| |
|
| cekica | Posté le 03/11/2007 à 10:25 |
Petit astucien
492 Messages
| on te la dit, tu changes juste les infos sur la requete SQL que tu as dans ton code en metant un tri par ce que tu ve, une limit. |
| |
|
| Maurice Guidicelli | Posté le 03/11/2007 à 16:10 |
Petit astucien
10 Messages
| Et pour visualiser sur l'écran de mon moniteur ces données ordonnées, je mets echo quoi ??? Merci ! |
| |
|
| Maurice Guidicelli | Posté le 03/11/2007 à 17:17 |
Petit astucien
10 Messages
| Je présente les choses autrement: J'ai fait le script suivant: $requete1 = "SELECT nom FROM votes ORDER BY nbvotes DESC LIMIT 1 "; $resultats = mysql_query($requete1); while ($en=mysql_fetch_array($resultats)) { $nom1=$en["nom"];} $requete2 = "SELECT nom FROM votes ORDER BY nbvotes DESC LIMIT 2 "; $resultats = mysql_query($requete2); while ($en=mysql_fetch_array($resultats)) { $nom2=$en["nom"];} $requete3 = "SELECT nom FROM votes ORDER BY nbvotes DESC LIMIT3 "; $resultats = mysql_query($requete3); while ($en=mysql_fetch_array($resultats)) { $nom3=$en["nom"];} echo " Les 3 premiers du classement sont, dans l'ordre : "."<br/><br/>"; echo $nom1." (Année de réalisation: ".$annee1.")"; echo "<br/>"; echo $nom2." (Année de réalisation: ".$annee2.")"; echo "<br/>"; echo $nom3." (Année de réalisation: ".$annee1.")"; echo "<br/>"; Cela marche TRES BIEN ! Mais n'y a t-il pas plus simple ? Surtout si on veut les 100 premiers d'un classement.... Je pense qu'il y a plus simple. En particulier en utilisant les fameuses fonctions PREV(), ou NEXT() . Mais utiliser ces fonctions, ça je ne sais pas encore faire.... Qui peut m'aider à simplifier ce script ? Voilà la question que je pose ! |
| |
|
| cekica | Posté le 03/11/2007 à 18:23 |
Petit astucien
492 Messages
| Tu te complqiues la vie la : regarde : $sql = "SELECT nom FROM votes ORDER BY nbvotes DESC LIMIT 1,3 "; $req = mysql_query($sql); print 'les trois premiers du classement sont :'; $i = 1; while($info = mysql_fetch_array($req) { if($i == 1 ){ print '1er au classement '; } else { print $i.' eme au classement '; } Print $info['nom'].' (réalisation en '.$info['annees'].') '; $i ++; }
Comme ca ,si jamais tu veux passer des 3 aux 100 premiers, tu n'auras juste qu'à modifier la limit dans la requetes. Modifié par cekica le 03/11/2007 18:25 |
| |
|
| Malcolm | Posté le 03/11/2007 à 18:39 |
Astucien
7270 Messages
| Allez, on fait un concours d'optimisation  $req = "SELECT nom, annee FROM votes ORDER BY nbvotes DESC LIMIT 3"; $dataset = mysql_query($req) or die(mysql_error());
echo "<p>Les 3 premiers sont :</p>"; $i = 0; while ($datarow = mysql_fetch_array($dataset)) { $i++; echo ($i == 1) ? "Premier" : $i."ème"; echo "au classement : ".$datarow['nom']." (Année de réalisation : ".$datarow['annee'].")"; }; PS : si tu ne prends pas le champ "annee" dans la requête SQL, tu ne pourras pas l'afficher, valable pour cekika aussi. Modifié par Malcolm le 03/11/2007 20:51 |
| |
|
| cekica | Posté le 03/11/2007 à 19:03 |
Petit astucien
492 Messages
| Malcolm a écrit :
Allez, on fait un concours d'optimisation  $sql = "SELECT nom, annee FROM votes ORDER BY nbvotes DESC LIMIT 3"; $dataset = mysql_query($req) or die(mysql_error());
echo "Les 3 premiers sont : "; $i = 0; while ($datarow = mysql_fetch_array($dataset)) { $i++; echo ($i == 1) ? "Premier" : $i."ème"; echo "au classement : ".$datarow['nom']." (Année de réalisation : ".$datarow['annee'].")"; }; PS : si tu ne prends pas le champ "annee" dans la requête SQL, tu ne pourras pas l'afficher, valable pour cekika aussi.
Oups c'est vrai , j'ai oublier mici malc Modifié par cekica le 03/11/2007 19:04 |
| |
|
| cekica | Posté le 03/11/2007 à 19:04 |
Petit astucien
492 Messages
| une question vaut mieux utiliser print ou echo ? |
| |
|
| Malcolm | Posté le 03/11/2007 à 20:53 |
Astucien
7270 Messages
| J'ai lu sur un article (si je retrouve l'adresse, je te fais signe) que echo serait meilleur en termes de performances, surtout, pour du texte, avec les simples quotes. En clair, echo 'texte' est plus rapide que echo "texte" qui est plus rapide que print "texte". D'autre part, echo a la possibilité, contrairement à print, de pouvoir afficher via concaténation des données diverses (opérations, etc) alors que - si je ne me trompe pas - print ne le fait pas. EDIT : ils semblent le dire sur phpdebutant : Elle n'a pas besoin de parenthèses, contrairement à print, et peut prendre plusieurs paramètres, séparés par des ",". echo est donc légérement plus rapide que print,
Source : http://www.phpdebutant.org/article14.php Modifié par Malcolm le 03/11/2007 20:55 |
| |
|
| Maurice Guidicelli | Posté le 05/11/2007 à 15:35 |
Petit astucien
10 Messages
| Merci cekica ! C'est cool !!! ( et résolu à la fois !) |
| |
|
| Maurice Guidicelli | Posté le 05/11/2007 à 15:39 |
Petit astucien
10 Messages
| Et merci à tous ( Malcolm,......) Parfois on sait faire des choses difficiles mais on est arrêté par d'autres, plus bénignes....
C'est fou ce qu'on peut apprendre sur ce forum. |
| |
|
|
| Haut de la page |