[PHP-mySql] requête imbriquée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [PHP-mySql] requête imbriquée

Re: [PHP-mySql] requête imbriquée

par zeus » 20 mai 2011, 23:13

Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.

Re: [PHP-mySql] requête imbriquée

par Mazarini » 18 mai 2011, 13:55

Bonjour,

Il faut comprendre que la clause WHERE fait une sélection sur les lignes de la table à prendre en compte alors que la clause HAVING fait une sélection sur les résultats après le calcul "group by".

Re: [PHP-mySql] requête imbriquée

par raditz » 18 mai 2011, 10:52

Merci Mazarini, ça marche et sans la date du jour, merci aussi a Sadeq pour son aide.
Génial =D>

Re: [PHP-mySql] requête imbriquée

par Invité » 18 mai 2011, 10:38

Merci pour votre réponse.
Vous avez raison pour les dates, je n'y avez pas pensé

Code : Tout sélectionner

$sql_pts_ancien = "SELECT lp_id,lp_uid,lp_date,SUM(lp_pts) AS pts_equipes_ancien FROM ce_lqdj_pts GROUP BY lp_uid HAVING lp_date < MAX(lp_date) ORDER BY pts_equipes_ancien DESC";
Le souci, c'est que mon SUM(lp_pts) me donne tjrs la somme de tous les enregistrement et pas la somme de tous les enregistrements - le dernier en date.

Vous voyez une soluce ?

Re: [PHP-mySql] requête imbriquée

par Mazarini » 18 mai 2011, 09:23

Bonjour,

$sql_last_pts= "SELECT lp_id, lp_uid, SUM(lp_pts) AS pts_equipes FROM ce_lqdj_pts GROUP BY lp_uid HAVING NOT lp_id IN (SELECT MAX(lp_id) AS max_lpid FROM ce_lqdj_pts GROUP BY lp_uid) ORDER BY pts_equipes_ancien DESC";

La présence du lp_id (en gras) dans le select et son absence dans le group by me fait douter du fonctionnement de la requête. Peut être que MySQL le tolère, mais il prend lequel parmi les ceux lié à lp_uid.

A mon avis, il ne faut pas utiliser HAVING mais where. HAVING permet une sélection sur le "résultat du group by" (d'ou ton ajout dans les colonnes du select ?).
SELECT lp_uid, SUM(lp_pts) AS pts_equipes 
FROM ce_lqdj_pts 
where NOT lp_id IN (SELECT MAX(lp_id) AS max_lpid FROM ce_lqdj_pts GROUP BY lp_uid) 
GROUP BY lp_uid 
ORDER BY pts_equipes_ancien DESC

Re: [PHP-mySql] requête imbriquée

par sadeq » 17 mai 2011, 14:05

Bonjour,

Dans ta table il faut un champ date qui spécifie la date où le nombre de points par journée (lp_pts) a été constaté pour un user (lp_uid). Car la clé primaire auto-incrémentée (lp_id) n'est pas suffisante dans ce cas de calcul.

[PHP-mySql] requête imbriquée

par raditz » 17 mai 2011, 12:28

Bonjour à tous,
je me casse la tête sur la requête suivante :

J'ai une table ce_lqdj_pts avec les champs : lp_id (auto increment, primaire), lp_uid (id user), lp_pts (nombre de point par journée).
Pour obtenir le nombre de points cumulés lors de la derniere journée et créer un classement, pas de soucis :

Code : Tout sélectionner

$sql_pts = "SELECT lp_uid, SUM(lp_pts) AS pts_equipes FROM ce_lqdj_pts GROUP BY lp_uid ORDER BY pts_equipes DESC";
J'aimerais obtenir le nombre de points cumulés lors de la journée précédente (càd le classement sans le dernier lp_id de chaque lp_uid) et là je bloque, je ne dois pas etre tres loin du compte :

Code : Tout sélectionner

$sql_last_pts= "SELECT lp_id, lp_uid, SUM(lp_pts) AS pts_equipes FROM ce_lqdj_pts GROUP BY lp_uid HAVING NOT lp_id IN (SELECT MAX(lp_id) AS max_lpid FROM ce_lqdj_pts GROUP BY lp_uid) ORDER BY pts_equipes_ancien DESC";
J'obtiens le meme résultat que ma requete précédente, je bisque :twisted:
Merci pour votre aide #-o