Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 22/11/2011, 14h05   #1
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
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
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h10   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 652
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 652
Points : 2 653
Points : 2 653
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.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h27   #3
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
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 :
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 :
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
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 14h58   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 333
Points : 18 333
Envoyer un message via MSN à CinePhil
Ç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 :
Citation:
Un véhicule peut appartenir à zéro, une ou plusieurs régions.
Je la complète :
Citation:
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)

Citation:
J'essaie de trouver la requête MYSQL qui va bien pour calculer le nombre de véhicules par régions
Code :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h17   #5
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
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 ?
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h27   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 652
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 652
Points : 2 653
Points : 2 653
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.
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h38   #7
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
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.
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 16h39   #8
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
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)
Maljuna Kris est actuellement 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 17h16.


 
 
 
 
Partenaires

Hébergement Web