> Tous les forumsForum des Webmasters

 Tri d'un tableau resultant d'une requête MysqlSujet résolu
Statut du sujet : RESOLU Imprimer
 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 !

 Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 
 
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

Afficher le profil de cekicaEnvoyer un message privé à cekica
  Revenir en haut de la page
 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.....

Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 Revenir en haut de la page
 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 "; ?

Afficher le profil de stef59280Envoyer un message privé à stef59280
 Revenir en haut de la page
 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 ?

Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 Revenir en haut de la page
 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.

Afficher le profil de cekicaEnvoyer un message privé à cekica
  Revenir en haut de la page
 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 !

Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 Revenir en haut de la page
 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 !

Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 Revenir en haut de la page
 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
Afficher le profil de cekicaEnvoyer un message privé à cekica
  Revenir en haut de la page
 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
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 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
Afficher le profil de cekicaEnvoyer un message privé à cekica
  Revenir en haut de la page
 cekica  Posté le 03/11/2007 à 19:04  
Petit astucien

492 Messages
une question vaut mieux utiliser print ou echo ?
Afficher le profil de cekicaEnvoyer un message privé à cekica
  Revenir en haut de la page
 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
Afficher le profil de Malcolm Voir la configuration de MalcolmEnvoyer un message privé à Malcolm
  Revenir en haut de la page
 Maurice Guidicelli  Posté le 05/11/2007 à 15:35  
Petit astucien

10 Messages

Merci cekica !

C'est cool !!! ( et résolu à la fois !)

Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 Revenir en haut de la page
 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.

Afficher le profil de Maurice GuidicelliEnvoyer un message privé à Maurice Guidicelli
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte




Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !
 

 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page