Besoin d'aide pour un SELECT multitables

Besoin d'aide pour un SELECT multitables - PHP - Programmation

Marsh Posté le 22-08-2011 à 16:50:03    

Bonjour,
 
Je sollicite votre aide car cela fais plusieurs jour que j'essaye de faire quelque chose en vain.
 
Je m'explique, je voudrai faire un fonction qui determine le nombre de membres actifs qui n'on pas de parrain et qui ont fais un minimum de 10 clics.
Pour cela je doit séléctionner les utilisateurs qui ont le champ "Parrain" vide dans la table "User" et qui apparraissent au moins 10 fois dans la table "Clic" puis compter le nombre de résultats.
 
Seulement, je sais ce que je veux mais je ne sais pas le traduire en PHP.
 
Merci d'avance pour votre aide
 
Alexis


Message édité par TheGotus le 22-08-2011 à 16:50:49
Reply

Marsh Posté le 22-08-2011 à 16:50:03   

Reply

Marsh Posté le 22-08-2011 à 18:34:16    

Ton problème est un problème de SQL, non de PHP.
 
Passons, décris-nous le contenu de tes tables
(en SQL : DESCRIBE ma_table)


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 22-08-2011 à 19:42:35    

J'ai indiqué dans mon premier post les table concernées mais ce que je cherche c'est comment le traduire en SQL

Reply

Marsh Posté le 23-08-2011 à 09:35:46    

Les tables c'est bien, les champs des tables ce serait un poil plus facile...
 
De plus, il serait pas mal de savoir quel SGBD tu utilises, tant qu'à faire.
 
Une requête pas trop réfléchie donnerait ça.
 

Code :
  1. select count(*) from (
  2.     select null from user u
  3.     inner join clic c on c.user_id = u.id
  4.     where u.parrain is null
  5.     group by u.id
  6.     having count(*) >=10)

Message cité 1 fois
Message édité par deliriumtremens le 23-08-2011 à 09:40:44
Reply

Marsh Posté le 24-08-2011 à 10:41:17    

deliriumtremens a écrit :

Les tables c'est bien, les champs des tables ce serait un poil plus facile...
 
De plus, il serait pas mal de savoir quel SGBD tu utilises, tant qu'à faire.
 
Une requête pas trop réfléchie donnerait ça.
 

Code :
  1. select count(*) from (
  2.     select null from user u
  3.     inner join clic c on c.user_id = u.id
  4.     where u.parrain is null
  5.     group by u.id
  6.     having count(*) >=10)



 
On doit pouvoir aussi s'en sortir sans jointure avec un truc de ce genre :
(a voir ce qui en pratique est le plus perf)

Code :
  1. SELECT
  2.    U.*
  3. FROM
  4.    USER U
  5. WHERE
  6.    U.ID_USER IN (
  7.        SELECT
  8.            C.ID_USER
  9.        FROM
  10.            COUNT C
  11.        GROUP BY
  12.            C.ID_USER
  13.        HAVING
  14.            count(C.ID_USER) >= 10
  15.    ) AND
  16.    U.ID_PARRAIN IS NULL;


 
Ca ne fonctionne sans doute pas directement dans certains SGBD. Genre Oracle qui devrait vouloir avoir le critère du having aussi dans le select, et donc impossant un niveau de select en plus.


Message édité par MEI le 24-08-2011 à 10:41:32

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

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