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 :

Calculer le nombre d'éléments via un champ de type SET


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut Calculer le nombre d'éléments via un champ de type SET
    Bonjour,

    J'ai une table 'vehicules' qui comprends un champ 'id' et un champ 'regions'.
    Le champ 'region' est de type SET avec comme valeurs déterminées les numéros de régions de France ('11','21','22','23','24','25',...).
    Un véhicule peut appartenir à zéro, une ou plusieurs régions.

    J'essaie de trouver la requête MYSQL qui va bien pour calculer le nombre de véhicules par régions, pour obtenir un résultat du genre :

    region = nbr
    11 = 2
    21 = 15
    22 = 7
    23 = 0
    24 = 5
    25 = 0
    ...

    j'ai essayé avec GROUP BY, mais ca ne marche pas

    Qq'un pourrait-il m'aider a trouver la bonne requête ?
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    c'est bien un group by qu'il faut utiliser.
    Lisez ceci http://sqlpro.developpez.com/cours/sqlaz/ensembles/

    et revenez avec votre requête si ca ne marche pas toujours pas.

  3. #3
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    Merci pour ce lien

    J'ai parcouru toute la page, et j'ai pas l'impression qu'elle aborde mon cas particulier de type SET (ou alors j'ai mal lu...)

    Je donne un peu plus d'infos :
    Voici ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    | id | region      |
    |  1 | 24,42,43    |
    |  2 | 24,43       |
    |  3 | 42,43       |
    |  4 |             |
    |  5 | 11,26,42,72 |
    Voici ma requête (qui ne marche pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT count(`id`) AS `nbr`, `regions` FROM `vehicules` GROUP BY `regions`
    Je précise que je suis pas très à l'aise avec le SQL sorti des requêtes toutes simples

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Ça ne marche pas tout simplement parce que vous avez mal modélisé les données !

    La première règle en matière de base de données relationnelle est : 1 colonne => 1 donnée. Là vous avez mis plusieurs régions dans la même colonne, ça ne va pas !

    Je reprends votre règle de gestion :
    Un véhicule peut appartenir à zéro, une ou plusieurs régions.
    Je la complète :
    et une région peut posséder plusieurs véhicules
    Le MCD (Méthode Merise) qui découle de cette règle de gestion :
    vehicule -0,n----appartenir----0,n- region

    Les tables qui découlent du MCD :
    vehicule (veh_id, veh_immatriculation...)
    region (reg_id, reg_code, reg_nom...)
    veh_appartenir_reg (var_id_vehicule, var_id_region)

    J'essaie de trouver la requête MYSQL qui va bien pour calculer le nombre de véhicules par régions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT r.reg_code, COUNT(v.var_id_vehicule) AS nb_vehicules
    FROM region r
    LEFT OUTER JOIN veh_appartenir_region v ON v.var_id_region = r.id_region
    GROUP BY r.reg_code
    ORDER BY r.reg_code
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    Oui, alors on s'est mal compris

    En fait si j'ai plusieurs données dans un même champ (regions), c'est justement pour éviter de créer deux tables supplémentaires (une pour les régions et l'autre pour la relation vehicules-regions).

    C'est justement pour cela que le champ 'regions' est de type SET.
    Si à chaque fois qu'on utilise le type SET on nous dit de faire du relationnel, je vois pas à quoi sert ce type

    S'il existe c'est bien pour une raison... non ?

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Ce type "SET" (désolé d'avoir lu trop vite votre 1er message) n'a rien avoir avec du SQL.

    Donc ensuite faut pas s'étonner qu'une simple requête ne marche pas avec des types exotiques de ce genre.

    Avez-vous dépiotez la doc MySql pour voir si des fonctions existaient pour ce genre de traitement ?


    En fait, si votre besoin final est d'avoir en affichage
    J'aurai plutôt tendance à effectuer une modilisation normale de votre base puis d'utiliser une fonction du type group_concat() au sein d'une vue qui produira le même résultat.


    Comme ca plus de problème de ce type.

  7. #7
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    Donc si je comprends bien, le type SET existe bien dans MySQL (uniquement), mais il ne faut pas l'utiliser.

    En gros c'est le "goto" du SQL, c'est le mal quoi...

    Bon, je vais faire autrement, genre une petite boucle en PHP sur chaque région pour calculer le nombres de véhicules via une requête basique, et zou

    Merci quand même les amis

    Je mets résolu même si ça ne l'est pas tout à fait.

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Citation Envoyé par Dionyzos Voir le message
    Si à chaque fois qu'on utilise le type SET on nous dit de faire du relationnel, je vois pas à quoi sert ce type
    Ça me rappelle une discussion que j'ai eue l'été dernier.
    Le formes normales encore et toujours.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. calculer le nombre d'éléments d'un tableau
    Par sanaefg dans le forum C
    Réponses: 2
    Dernier message: 29/01/2010, 22h24
  2. [XL-2007] calcul du nombre d'éléments identiques
    Par labo33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/05/2009, 16h52
  3. calculer le nombre d'éléments de chaque groupe
    Par amine003 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/12/2008, 11h04
  4. Réponses: 15
    Dernier message: 17/06/2006, 11h49
  5. Comparaison de base et calculs du nombre d'éléments dans Bas
    Par BXDSPORT dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2004, 08h00

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