IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-mySql] requête imbriquée


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut [PHP-mySql] requête imbriquée
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 !
    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise WHERE et non HAVING.
    Par contre il serait plus sérieux de travailler avec des dates.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ce1.lp_uid, SUM(ce1.lp_pts) AS pts_equipes 
    FROM ce_lqdj_pts ce1 
    where ce1.lp_id != (SELECT MAX(ce2.lp_id) FROM ce_lqdj_pts ce2 where ce2.lp_uid == ce1.lp_uid) 
    GROUP BY lp_uid ORDER BY pts_equipes DESC;
    pas bien réveillé aujourd'hui mais cela doit ressembler à ça

    edit: +1 avec sabotage pr la structure de la table ...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Merci pour votre réponse.
    Vous avez raison pour les dates, je n'y avez pas pensé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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 ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2006
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    On m'a proposé une réponse niquelle sur un autre forum, sans la date du jour et ça marche.
    Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    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

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui enfin la premiere réponse ici était déjà d'utiliser WHERE au lieu de HAVING mais tu n'en as pas tenu compte.

    Ne pas utiliser les dates n'est pas un avantage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MYSQL => requête imbriquée = problème
    Par ambigua dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/04/2012, 19h09
  2. [MySQL] PHP-MYSQL: Requête avec jointures
    Par idamarco dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/03/2009, 08h15
  3. [MySQL] Problème de requête imbriquée (mysql) & php
    Par niacinside dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/05/2008, 11h59
  4. [mysql et php] requêtes imbriquées
    Par php_de_travers dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/04/2006, 23h46
  5. [php-mysql] requête qui ne marche pas....
    Par sanosuke85 dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/01/2006, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo