Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2011, 13h15   #1
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 44
Points : 10
Points : 10
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 :
$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 :
$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.
djew13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 14h12   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Utilise WHERE et non HAVING.
Par contre il serait plus sérieux de travailler avec des dates.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 14h18   #3
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Code :
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 ...
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 10h29   #4
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 44
Points : 10
Points : 10
Merci pour votre réponse.
Vous avez raison pour les dates, je n'y avez pas pensé

Code :
$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 ?
djew13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 10h46   #5
Candidat au titre de Membre du Club
 
Inscription : août 2006
Messages : 44
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 44
Points : 10
Points : 10
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 :
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
djew13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 10h58   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h42.


 
 
 
 
Partenaires

Hébergement Web