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

Requêtes MySQL Discussion :

Probleme de comprehension sql, calcul et tri d'age depuis des dates


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Probleme de comprehension sql, calcul et tri d'age depuis des dates
    Bonjour je souhaite faire quelque chose de tres simple en sql mais je ne comprend pas pourquoi il me bloque ma requete.

    en gros, j'ai une base qui contient un champ date de naissance de type "date",
    J'effectue mes jointure pour en degager les utilisateurs concerné, mais apres je veux simplement compter le nombre d'utilisateurs entre 25 et 30ans

    j'ai tenté cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT	COUNT(*) as compte, (DATEDIFF(CURDATE(), user_date_naissance)) AS calcul FROM t_user	JOIN t_jointure ON tri_user_id = jointure_user_id
    JOIN x_diplome ON diplome_id = '42'
    AND dsd_entite_id = 520
    WHERE (DATEDIFF(CURDATE(), user_date_naissance)) > 9490 AND
    (DATEDIFF(CURDATE(), user_date_naissance)) <= 10950
    j'ai essayé de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE calcul > 9490 AND
    calcul <= 10950
    ca me mettait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
    donc j'ai rajoutéet là j'ai le droit à un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't group on 'compte'
    mais rien n'y fait.

    à vrai dire j'ai toujours ce genre de problemes que je résoud par des bidouillages mais je crois que j'ai beaucoup de mal avec la syntax du sql.
    Si quelqu'un de genereux pouvait juste m'indiquer mon erreur que je vois le truc en sql que je pige pas (pourquoi je peux jamais sauver mes variables et les re-utiliser apres, et surtout comment modeliser la difference entre le COUNT qui me sort 1seul resultat et des autres trucs dont chaque ligne est à traiter et en sortir un resultat)

    bref je bloque dessus et ca m'agace car le sql est incomparablement plus rapide que le php et est fait pour traiter les calculs et les tables et bloquer dessus ce genre de requetes depuis 1semaine et demi commence à me faire perdre les nerfs et me rendre fou

    merci encore de votre aide!
    Paul

  2. #2
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...


    sur ta premiere requete, tu vires le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... , (DATEDIFF(CURDATE(), user_date_naissance)) AS calcul ...
    Parce que si tu le met, tu dois avoir un GROUP BY ..

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    si tu ve juste le nombre, ceci ne suffit pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT COUNT(*) AS compte FROM t_user	
    JOIN t_jointure ON tri_user_id = jointure_user_id
    JOIN x_diplome ON diplome_id = '42' AND dsd_entite_id = 520
    WHERE (DATEDIFF(CURDATE(), user_date_naissance)) > 9490 AND
    (DATEDIFF(CURDATE(), user_date_naissance)) <= 10950
    Sinon, si tu cherche à compter en fonction de critèes, c'est sur les autres colonnes que ton count que tu dois faire des group by

    bon courage

    Michel

  4. #4
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    ok soudain je me rend compte à qu'elle point mon esprit est debile '-_-
    J'ai vraiment cherché comme un teubé

    merci encore!! j'en devenais fou!

    sinon Cybher, qu'entends tu par comter sur des criteres à travers des colonnes? tu as un exemple simple? ^^

    merci merci encore!

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    prenons un exemple simple

    table test avec 2 colonnes : id , nombre
    quelques tuples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    1 1
    1 2
    1 8
    2 1
    on execute la requete suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id,count(*) from test group by id
    cela va te retourner ceci :
    donc si tu fais un count et que tu precise d'autres colonnes dans ton select, il faut utiliser un group by


    Edit : pense au tag résolu si tu as ce que tu voulais

  6. #6
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Ha oui j'avais vu ca en cherchant des trucs sur count
    C'est d'ailleurs pour cela que j'avais du l'ecrire comme ca au depart

    merci encore pour votre aide!
    J'y arrive bcou mieux now j'en suis à faire des moyennes avec AVG ^^

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/06/2012, 10h24
  2. Calculer un age depuis une date de naissance
    Par pi-2r dans le forum Langage
    Réponses: 12
    Dernier message: 03/01/2011, 22h28
  3. [MySQL] calcul automatique de jour en fonction des dates.
    Par Hotei dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/10/2010, 12h04
  4. [SQL] Calcul du nombre de mois entre deux dates
    Par Lolie11 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/03/2009, 12h46
  5. [SQL] calcul du nombre d'heure entre deux dates
    Par ahmedbj dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/03/2009, 13h10

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