MySQL : Un Order By Tres ambigu !!

MySQL : Un Order By Tres ambigu !! - PHP - Programmation

Marsh Posté le 06-05-2006 à 19:46:38    

Salut les spécialistes  ;)
 
Malgré mes recherches sur google mon ami, je n'ai pu trouvé mon bonheur et je m'en remet donc à vos connaissances :whistle:
 
Voila le topo..
 
J'ai une table "users"
avec comme champ : "idUser" "points" "parrainid"
 
Je vous explique l'histoire du parrain : chaque membre qui a des filleuls gagne 10% de leurs points.
 
j'aimerais faire une requete qui classe en fonction de tous les points : les "points" mais aussi en fonction des Points gagné grace au parainage.
Et ca, d'un seul coup.
 
L'idée ce serait un ORDER By (points+(SUM(points where parrainid = $myid))x0.1)
 
J'aimerais savoir si c'est possible, mais j'avoue avoir aucune idée de la gueule de la requete.
Peutetre faudrait faire une requete temporaire (j'ai entendu parler de ça).
 
J'ai aucune idée de comment on fait ça, un coup de main serait la bienvenue  :)  
 
Pourtant, je suis pas trop nul normallement lol
 
Merci beaucoup.

Reply

Marsh Posté le 06-05-2006 à 19:46:38   

Reply

Marsh Posté le 06-05-2006 à 22:16:30    

SELECT  
     points+  
    (SUM(SELECT points FROM users WHERE parrainid=$myid)*0,1) AS pointsfilleul  
FROM users  
WHERE idUser=$myid
ORDER BY pointsfilleul
 
 
NON TESTE !!! :p


Message édité par energiez le 06-05-2006 à 22:18:09
Reply

Marsh Posté le 06-05-2006 à 23:35:47    

Merci mec, j'ai testé un peu modif mais ce que tu m'as dit m'a bien aidé, ça m'a montré la voie :)
 
Bon ça me donne ça pour le classement TOP10 des membres :
 
SELECT idUser, login, stat_points_thismonth_withoutbonus + (
  SELECT SUM( stat_points_thismonth_withoutbonus )
  FROM table_members
  WHERE parrainid = '2' ) AS stat_points_thismonth
FROM table_members
ORDER BY stat_points_thismonth DESC
LIMIT 10  
 
Bon maintenant, je me rend compte que c'est encore + complexe que ça.
Car là, le parrainid n'est pas dynamique.
Et je m'etais trompé, c'est pas $myid mais plutot table_members.idUser enfin un truc de relationnelle non ?
 
Du relationnel Oui mais avec la requete "de premier niveau" (on se comprend?)
 
Autre soucis, je vois pas trop où mettre mon *0.1 (enfin si mais ça ne change rien, c'est peutetre du au premier probleme en fait, je pense qu'il vaut mieux resoudre le premier d'abord).
 
Merci encore à toi EnergieZ :)


Message édité par Capt1TaRace le 06-05-2006 à 23:42:07
Reply

Marsh Posté le 07-05-2006 à 00:46:29    

J'ai en partie trouvé la solution à mon premier probleme, par corrélation.
 
SELECT idUser, login, stat_points_thismonth_withoutbonus + (
  SELECT SUM( stat_points_thismonth_withoutbonus )
  FROM table_members
  WHERE parrainid = t1.idUser ) AS stat_points_thismonth
FROM table_members t1
ORDER BY stat_points_thismonth DESC
LIMIT 10  
 
Le probleme maintenant, c'est que si l'user n'a pas de filleuil, son stat est "NULL".

Reply

Marsh Posté le 07-05-2006 à 13:06:08    

J'ai peutetre trouvé la source du probleme.
Bon en fait je bloque à ce niveau la :
 
38+2=40 ça j'y arrive.
38+null=null OR JE VOUDRAIS QUE LE RESULTAT SOIT 38
 
Comment on fait ça ? pour l'instant je fais l'addition avec un SELECT(nobonus+bonus)
 
Merci ;)

Reply

Marsh Posté le 07-05-2006 à 13:13:04    

Bon, j'ai finalement réussi en cherchant sur HFR :)
J'ai trouvé IFNULL.
 
 

Code :
  1. SELECT idUser, login, stat_points_thismonth_withoutbonus + IFNULL( (
  2.   SELECT SUM( stat_points_thismonth_withoutbonus ) * 0.1
  3.   FROM table_members
  4.   WHERE parrainid = A.idUser ) , 0
  5.   ) AS stat_points_thismonth
  6. FROM table_members A
  7. ORDER BY stat_points_thismonth DESC
  8. LIMIT 10


 
 :bounce:


Message édité par Capt1TaRace le 07-05-2006 à 13:57:27
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed