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 SQL Discussion :

Plusieurs valeurs dans SELECT


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Plusieurs valeurs dans SELECT
    hello

    J’aimerai afficher 2 valeur dans mon SELECT

    je m'explique

    j'ai une table "stats" avec les champs id, id_perso, date, xp
    tous les jours je rentre des valeurs pour X personnes

    je fais la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `nom_perso`,`date`,MAX(xp) AS `xp_actu`  FROM `stats`
    RIGHT JOIN `personnage` ON `stats`.`id_perso`=`personnage`.`id`
    GROUP BY `id_perso`
    ORDER BY `xp_actu`  DESC
    qui me donne:
    nom_perso date xp_actu
    Artur 2014-05-22 02:00:05 7614884802
    Pierre 2014-05-22 06:54:58 5274141617

    j'aimerais avoir une colonne de plus qui s’appelle "xp_hier" et qui prenne la colonne MAX(xp) pour la date de hier

    je n'y arrive pas

    qqin aurait une solution stp?

    merci d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Comme la colonne date ne rentre pas dans les critères de regroupement, MySQL sort n'importe quelle valeur de la table pour l'afficher dans cette colonne. (Les autres SGBD refuseraient, avec raison, d'exécuter cette requête)
    Dans ces conditions, il est difficile d'identifier quelle est la veille de cette date...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    J'avoue pas avoir compris ta réponse

    J'aimerais concaténer ces 2 requêtes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT `nom_perso`,`date`,MAX(xp) AS `xp_actu`  FROM `stats`
    RIGHT JOIN `personnage` ON `stats`.`id_perso`=`personnage`.`id`
    GROUP BY `id_perso`
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT `nom_perso`,MAX(xp) AS `xp_hier` FROM `stats`
    RIGHT JOIN `personnage` ON `stats`.`id_perso`=`personnage`.`id`
    WHERE `date` = DATE_SUB(DATE(NOW()), INTERVAL 1 DAY)
    GROUP BY `id_perso`
    en sachant que la colonne id_perso est la même pour les 2 tables

    ça me ferait un tableau avec ces entêtes:

    nom_perso date xp_actu xp_hier

    J'espère que c'est plus compréhensible

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Ta première requête suppose que la valeur de xp ne peut être que croissante...
    Dans le cas contraire, c'est la valeur maximale de xp dans tout l'historique du personnage qui sera retournée.
    Est-ce bien ce que tu recherches ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    la valeur XP ne peut être que croissante effectivement au pire égale de jour en jour (c'est des compteurs si il décompte il y a un grave problème)

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Si ta seconde requête retourne bien les valeurs que tu attends, il suffit de regrouper ces deux requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  prs.nom_perso
        ,   MAX(st1.date)   AS date_actu
        ,   MAX(st1.xp)     AS xp_actu
        ,   MAX(st2.xp)     AS xp_prec
    FROM    personnage  prs 
        LEFT JOIN 
            stats       st1
            ON  st1.id_perso = prs.id
        LEFT JOIN
            stats       st2
            ON  st2.id_perso = prs.id
            AND st2.date     = DATE_SUB(DATE(NOW()), INTERVAL 1 DAY)
    GROUP BY prs.nom_perso
    ;
    Attention : ce fonctionnement est valable parce qu'on recherche un maximum, il donnerait des résultats erronés en cas de comptage ou de somme (produit cartésien).
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    merci beaucoup c'est parfait

    peux-tu encore juste m'expliquer ce qu'est st1 et st2 ?

    désolé je suis novice

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    st1 et st2 sont des alias sur la table stats, qui est appelée deux fois dans la requête. (lignes 7 et 10 dans cette requête)
    Toutes les références à cette table stats doivent passer par ces alias, pour bien identifier quelles données sont consultées.
    Par ailleurs, l'utilisation d'alias sur les tables a de plus l'avantage de simplifier l'écriture (et la lecture) des requêtes.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    merci encore énormément

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

Discussions similaires

  1. plusieurs valeurs dans une seul select
    Par sonja dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 11/06/2007, 16h30
  2. récupérer plusieurs valeurs dans un champ hidden
    Par karimphp dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2006, 17h13
  3. Réponses: 10
    Dernier message: 03/07/2006, 14h55
  4. Réponses: 4
    Dernier message: 19/05/2006, 10h26
  5. Plusieurs valeurs dans un value
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2004, 10h58

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