begin process at 2012 05 31 06:59:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Problème Mysql / while / do


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème Mysql / while / do

jeudi 7 juin 2007 à 05:10:13 | Problème Mysql / while / do

OmbreNoir

Bonjour,
Je m'explique,
j'aimerais pouvoir avoir la position d'une table sans while ou do. En faite ma commande se fait comme ceci:


[code]
<?Php
$db = mysql_connect('localhost', ''.$db_users.'', ''.$db_pass.'');
mysql_select_db($db_name, $db);
$var 'SELECT * FROM users ORDER BY note ASC';
$i = 0;
do {
$data = mysql_fetch_asssoc($var);
if (!$data) {
break;
}
   if ($data['users'] != 'OmbreNoir') {
$i++;
   }
} while(true);
echo $i;
?>
[/code]

Voilà cette commande vous montre se que je veux faire.. je veux retourner la position exacte de la personne ici OmbreNoir par rapport au NOTE exemple de table:
[id] [users          ][NOTE]
[01][OmbreNoir][6     ]
[02][Allo           ][5        ]
[03][Boh           ][7        ]
--------------------------
Si ont fait le do en haut OmbreNoir va être à la position 2 ($i = 2)
Mais si j'ai 10 000 tables, qui dois être rafraichit à chaque page de mon site parce que son classement est afficher sur mon site, je suis pas mal sur que sa va prendre beaucoup trop du cpu
Alors j'ai pensé qu'il avait peut-être un autre moyen de sortir la position sans faire le do...
Merci de bien vouloir m'aider..

jeudi 7 juin 2007 à 09:35:15 | Re : Problème Mysql / while / do

neigedhiver

Salut, Tu lis pas la doc de MySQL ? Y'a des trucs intéressants comme la clause WHERE qui te permet de limiter les résultats en fonction d'un critère... Par exemple : // Admettons que $user_name = 'OmbreNoir'; $sql = 'SELECT * FROM users WHERE user_name=\'' . $user_name . '\';'; Enfin je comprensd pas bien bien ce que tu veux exactement, vu qu'en plus tu te mélanges dans le vocabulaire. Si tu as 10 000 tables dans ta base de données, faut peut-être penser à utiliser un serveur rien que pour ça, voire même des clusters, et Oracle serait plus adapté que MySQL. Je pense que tu parlais plutôt d'enregistrements. La table, dans l'exemple que tu donnes, c'est 'users', les enregistrements, les membres. 10000 membres, oui, c'est mieux.
jeudi 7 juin 2007 à 12:08:45 | Re : Problème Mysql / while / do

J_G

Salut, Je crois qu'il ne veut former un tableau de score ordonné de ces utilisateurs (ça sens le jeu en ligne), mais n'afficher que la parti pertinente pour l'utilisateur actuellement connecté... C'est à dire les trois directement meilleurs et les trois directement moins bons... Ainsi l'utilisateur suit ça progression dans le classement au fur et mesure des rechargements. Si c'est ça... honnêtement, fais le en PHP. Ca ne va pas te coûter tant de temps que ça, surtout si tu n'as pas 10000 utilisateurs...
jeudi 7 juin 2007 à 15:59:44 | Re : Problème Mysql / while / do

OmbreNoir

Ok je vais tenter de m'expliquer mieu désolé.
Sur mon site, sur chacune des pages la personne vois ses informations dans un rectangle à gauche:
____________________
Inforamtion de OmbreNoir
Note: 4/10
Position: 2304/15000
Membre depuis: 15 jours.
---------------------------

La position de OmbreNoir ici, si je fais ma commande que je vous ai montré plus haut sa va lui donner la bonne position. Mais (J_G) je mets une variables à 10 000 membres pour être sûr que si un jour le site arrive à 10 000 membres que le site étais préparer pour sa, personnelement sa serais possible que sa arrive. Mais bon donc si je fais faire une requête SQL à toute les pages, pour tout le monde sur une boucle de 10 000 fois (tout dépend de sa position) mais si il est 9 987 sa va faire la boucle 9 987 fois ... pour chaque personne du site (Si il a 1000 personnes de connecter en même temp, la boucle va se faire +/- 10 000 fois sur 1000 membres­... je risque de faire tout sauté )

J'avais pensé qu'il existait peut-être un moyen de retourner la position de la personne avec une commande direct exemple... mysql_num_rows($sql);  sa retourne la position (Je donne sa comme exemple je sais que sa pas rapport mais bon)
Si non comment pourrais-je faire?

jeudi 7 juin 2007 à 16:34:43 | Re : Problème Mysql / while / do

J_G

Réponse acceptée !
Ah, ok...

Si tu ne veux que trouver le classement... c'est très simple en fait :

select u.*,
    ( (select count(t.id) from utilisateurs as t where t.note > u.note ) + 1 ) as position
from utilisateurs as u
where u.nom='OmbreNoire'


Mieux ?


jeudi 7 juin 2007 à 17:17:09 | Re : Problème Mysql / while / do

OmbreNoir

Hmm ok .. je comprends pas tout à fait la commande.. peux-tu me l'expliquer svp pour que je puisse m'en servir je dois la comprendre et savoir comment m'en servir :)

Merci à toi

jeudi 7 juin 2007 à 17:55:27 | Re : Problème Mysql / while / do

J_G

Réponse acceptée !
Bien sur...


Donc, c'est une requête avec une sous requête.

La requête principale P(N) :
select *               -- récupérer les champ
from utilisateur -- de l'utilisateur
where nom=N   -- s'appelant N


Prenons la sous requête S(N) :
select count(id) -- compter le nombre
from utilisateur -- des utilisateurs
where note > x  -- ayant un note supérieure à X



Donc de (P), tu récupères aussi la note de ton utilisateur nommé N, d'accord ?

Imaginons que tu utilises cette note comme variable X de (S)... Alors, tu vas avoir le nombre d'utilisateurs ayant une meilleure note que N. appelons ce nombre 'nb'.

Donc de nb, tu déduis facilement la position 'p' dans le classement de ton utilisateur N. Si nb=0, alors personne est meilleur, il est premier. si nb = 2, il est troisième... bref, p = nb +1 !

Donc, pour récupérer le p de N en même temps que ces autres champs, on modifie un peu (P) :
select *, nb+1 as p
from utilisateur
where nom=N

Tu suis ?
Appelons cette nouvelle requête P1(N,nb).

Donc P1(N) contient une variable nb. Cette variable est donnée par la requête (S), je fais brutalement du remplacement de variable :
select *, S(X) + 1 as p
from utilisateur
where nom=N

ok ?  là c'est P2(N,X)... qui retourne l'utilisateur avec sa position...


Alors que vaut X ? ben, c'est la note de l'utilisateur qu'on est en train de séléctionner...
Ainsi :
select *, S(note) + 1 as p
from utilisateur
where nom=N


Là j'ai Pp(N), où, par le simple paramètre N, la fonction (requête) me retourne l'utilisateur et sa position.


Bon, par la suite... il faut aider un petit MySQL est donner des noms aux deux tables utilisateurs afin que la mécanique sache comment faire (dans "note > note"... C'est la note de qui ?)

donc je nomme la table de (P) 'u' et celle de (S) 't' ... complètement arbitraire...
ainsi : "t.note > u.note" devient compréhensible. Non ?
jeudi 7 juin 2007 à 17:57:22 | Re : Problème Mysql / while / do

J_G

avec qques confusion de nommage... (P), P1(N)... c'est ça ;)
jeudi 7 juin 2007 à 22:10:45 | Re : Problème Mysql / while / do

OmbreNoir

Ok je comprends sa semble être bon mais
Comment je retourne..
$sql = 'select u.*, ( (select count(t.id) from utilisateurs as t where t.note > u.note ) + 1 ) as position from utilisateurs as u where u.nom='OmbreNoir'';
echo $sql;

?

Merci énormément pour l'expliquation si clair sa m'aide vraiment!

jeudi 7 juin 2007 à 22:25:54 | Re : Problème Mysql / while / do

J_G

Je suis très surpris par ta question....

Tu faisais comment là ?

$db = mysql_connect('localhost', ''.$db_users.'', ''.$db_pass.'');
mysql_select_db($db_name, $db);
$var 'SELECT * FROM users ORDER BY note ASC';
$i = 0;
do {
$data = mysql_fetch_asssoc($var);

...

En plus, c'est complètement faux ton script, j'avais pas vu.
Va faire un tour sur www.php.net fonction mysql_query et regarde les exemples d'utilisation.

A+

1 2

Cette discussion est classée dans : mysql, db, do, while, position


Répondre à ce message

Sujets en rapport avec ce message

While inverse [ par Tilix ] Bonjour,Je voudrais savoir comment faut-il faire pour inversé l'arrivé des données dans une table mysqlSource personnel :$db = mysql_connect('host', ' Problème d'utilisation d'une classe MySQL du site [ par tataye ] Bonjour,Je suis en train de faire des tests avec la classe SQL  de FhX (source N°33135) et je rencontre actuellement quelques difficultés.J'ai fait un Scripts de connexion et script de gestion des utilisateur [ par moussa_abdou ] Bonjour à tous, J'ai écrit deux scripts qui ne marchent pas bien : 1- un script d'administration des users ( création dans une table utilisateur avec Parsing de données SQL qui marchait mais qui marche plus...à l'Aide ! [ par la_ptite_85 ] Rhâ !Ca marchait très bien il a fallu que j'y mette mes deux mains gauches dedans...Voilà mon code : $host = "sql.free Array & MySQl [ par boulika ] BonjourJe dois faire une petit programme avec des données de mysql :je dois récupérer des infos d'une base de données mais de deux tables :$db = mysql Authentification ie et firefox [ par mounelelabrador ] Bonjour, Je dois créer un site avec gestion membres, admins et vu que c'est pour un cours je ne peux pas vraiment télécharger sur internet des script Correction de code simple pour debutant [ par michmichman ] Bonjour j'ai fais un petit code pour verifier si un utilisateur est enregistré dans ma db mais bien sur il marche pasje vous le montre je suis sur que redirection et session [ par sparh ] Bonjour,je bloque sur un problème de session.J'essai de créer une zone membre à l'aide des sessions. Pour l'instant tout va bien et j'ai donc un lien Problème d'affichage [ par refkaben ] Bonjour!J'ai un probleme au niveau de l'affichage du resultat d'une requete,je veux afficher le resultat d'une requete sur deux colonnes:j'ai une tabl position dans une table mysql [ par slyderkiller ] slt a ttvoila mon probleme j'aimeré récuperé l'emplacementde mes données dans la table sql dans une page en php ma


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales