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 20/09/2011, 21h42   #1
Invité de passage
 
Inscription : mai 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 3
Points : 0
Points : 0
Par défaut requête sur les occurences

Bonjour,

Je travaille en ce moment sur une base de données recensant des tireurs et les tirs réalisés. Je suis plutôt novice et béotien en mysql.
J'ai une table1 avec les champs N° du tireur, nom, prénom, nb de tirs arme1, scores arme1, nombre de tirs arme2, scores arme2,
et une table2 dans laquelle sont rentrés les tirs avec les champs:
N° du tireur, date du tir, arme utilisée, nombre de cartouches, impacts.

Je souhaiterais trouver une requête qui me permette de tenir à jour le nombre de tirs avec chaque arme dans les champs nb de tirs arme1 et nb de tirs arme2 de la table1 pour chaque tireur.

J'ai pensé à une requête qui actualiserait ces champs dans le genre de:
Code :
1
2
3
4
SELECT COUNT (arme utilisée) 
FROM table2 
WHERE table2.N°dutireur = table1N°dutireur 
  AND arme utilisée LIKE 'nom de l'arme';
ça fonctionne très partiellement car ça me donne le total des tirs réalisés avec cette arme, mais quel que soit le tireur, c'est-à-dire que ce total s'inscrit dans le champ "nb de tir arme1" de la table1 mais dans toutes les lignes.
Comment faire ? Quelqu'un a-t-il une solution ?
Merci d'avance.
MILORD65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 22h50   #2
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 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par MILORD65 Voir le message
J'ai une table1: avec les champs N° du tireur, nom, prénom, nb de tirs arme1, scores arme1, nombre de tirs arme2, scores arme2,
Pour commencer, tu as mal modélisé les données !
Cette table semble être celle des tireurs et ne doit comporter que des données relatives aux tireurs, pas aux tirs. Encore moins en multipliant les colonnes porteuses des mêmes informations (nb de tirs arme1, scores arme1, nombre de tirs arme2, scores arme2) qui de plus sont des informations calculables qu'on ne stocke pas en BDD.

Et plutôt que "table1", autant l'appeler "tireur" !
tireur (trr_id, trr_nom, trr_prenom)

Citation:
et une table2 dans laquelle sont rentrés les tirs avec les champs:
N° du tireur, date du tir, arme utilisée, nombre de cartouches, impacts.
Donc appelons cette table "tir"
tir (tir_id, tir_id_tireur, tir_date, tir_nb_cartouches, tir_nb_impacts)

Tu vois que je n'ai provisoirement pas mis l'arme utilisée car il te faut aussi une table des armes pour ne pas répéter X fois le nom de la même arme dans la colonne, potentiellement avec des orthographes différentes pour la même arme, ce qui ne facilitera pas les statistiques et donnera des résultats de requêtes erronés.

arme (arm_id, arm_nom)
Et je mets l'identifiant de l'arme en clé étrangère dans la table tir, comme y figure déjà l'identifiant du tireur :
tir (tir_id, tir_id_tireur, tir_id_arme, tir_date, tir_nb_cartouches, tir_nb_impacts)

Citation:
Je souhaiterai trouver une requête qui me permette de tenir à jour le nombre de tirs avec chaque arme dans les champs nb de tirs arme1 et nb de tirs arme2 de la table1 pour chaque tireur.

J'ai pensé à une requête qui actualiserai ces champs dans le genre de:
Code :
1
2
3
4
SELECT COUNT (arme utilisée) 
FROM table2 
WHERE table2.N°dutireur = table1N°dutireur 
  AND arme utilisée LIKE 'nom de l'arme';
LIKE 'nom de l'arme' est équivalent à = 'nom de l'arme' puisque tu n'utilises pas de caractère générique.
Petit détail supplémentaire : comme 'nom de l'arme' contient une apostrophe et que la chaîne de caractères est entourée d'apostrophes, il faut doubler l'apostrophe intérieure : 'nom de l''arme'
Citation:
ça fonctionne trés partiellement car ça me donne le total des tirs réalisés avec cette arme mais quelque soit le tireur c'est à dire que ce total s'inscrit dans le champ "nb de tir arme1" de la table1 mais dans toutes les lignes.
C'est effectivement incomplet.

Tu cherches donc à connaître, pour chaque tireur et par arme, le nombre de tirs réalisés et les scores obtenus.
Code :
1
2
3
4
5
6
7
8
9
SELECT t.trr_nom, t.trr_prenom, 
    a.arm_nom AS arme, 
    SUM(tir.tir_nb_cartouches) AS nb_tirs, 
    SUM(tir.tir_nb_impacts) AS score
FROM tir
INNER JOIN tireur t ON t.trr_id = tir_id_tireur
INNER JOIN arme a ON a.arm_id = tir.tir_id_arme
GROUP BY t.trr_nom, t.trr_prenom, a.arm_nom AS arme
ORDER BY t.trr_nom, t.trr_prenom, a.arm_nom AS arme
__________________
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 21/09/2011, 08h38   #3
Invité de passage
 
Inscription : mai 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 3
Points : 0
Points : 0
Merci beaucoup pour cette réponse au néophyte que je suis en mysql.
Je vais essayer et te dis bientôt si j'y suis arrivé !

Jean-pierre.
MILORD65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 22h17   #4
Invité de passage
 
Inscription : mai 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 3
Points : 0
Points : 0
Par défaut requête sur les occurences

Bonsoir,

En fait me revoilà car je voudrais préciser quelque chose que j'ai mal expliqué au départ. Avant même de compter le nombre de tirs (de cartouches tirées) ou même le score, je voulais compter le nombre de tirs (en fait de sessions de tir) quel que soit le nombre de cartouches tirées par session (ou enregistrement en fait qui correspond à une date) avec une arme déterminée.

Comment faire ?
MILORD65 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 08h24   #5
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 324
Points : 18 324
Envoyer un message via MSN à CinePhil
Il suffit d'ajouter
Code :
COUNT(DISTINCT tir_date) AS nb_session_tirs
dans le SELECT.
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h51.


 
 
 
 
Partenaires

Hébergement Web