Requete SQL

Requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 03-11-2017 à 00:27:59    

Bonsoir,
 
J'ai un problème qui peut paraitre risible pour certains mais cela fait un moment que je n'ai pas pratiqué du SQL.
Donc voila dans ma base j'ai 3 tables :
 
- Clients (numClient / Prenom / nom /etc...)
- Location (numLocation / numeroclient[Cle etrangere] / datelocation / etc
- LocSemaine (numLocation[cle etrangere], numSemaine[cle etrangere]) Cette table me sert de jointure entre deux tables (Location et une table période qui ne necessite pas d'être citer pour ma requête).
 
 
Voici ce que j'aimerai faire :
 
Afficher pour chaque location: le numéro location, les nom et prénom du client et le nombre de semaines réservées.
 
Ce que j'ai fait :  
 
Dans un premier temps facilement :
 

Code :
  1. Select location.numLocation,client.nomClient, client.prenomClient
  2. FROM location NATURAL JOIN client
  3. WHERE client.numClient=location.Client_numClient;


 
Qui me retourne bien les locations avec leurs clients (nom+prenom)
 
 
ensuite j'arrive a recuperer le nombre de semaine reserver pour une location donné avec cette requete :
 

Code :
  1. SELECT Location_numLocation, COUNT(*)
  2. FROM locsemaine
  3. GROUP BY Location_numLocation;


 
 
Par contre je ne comprends pas comment je pourrais les associés pour avoir tout les résultats voulu d'un seul coup.
 
Cdlt

Reply

Marsh Posté le 03-11-2017 à 00:27:59   

Reply

Marsh Posté le 03-11-2017 à 15:05:28    

Je ne comprends pas trop la logique de la structure des tables relatives à la location :??: Pourquoi la table location ne contient pas une date de début et de fin ? Quel est l'intérêt de la table LocSemaine ?
 
Au passage, je doute que numSemaine dans LocSemaine soit une clé étrangère : c'est plutôt une clé primaire :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-11-2017 à 15:17:50    

Dolb66 a écrit :

Bonsoir,
 
J'ai un problème qui peut paraitre risible pour certains mais cela fait un moment que je n'ai pas pratiqué du SQL.
Donc voila dans ma base j'ai 3 tables :
 
- Clients (numClient / Prenom / nom /etc...)
- Location (numLocation / numeroclient[Cle etrangere] / datelocation / etc
- LocSemaine (numLocation[cle etrangere], numSemaine[cle etrangere]) Cette table me sert de jointure entre deux tables (Location et une table période qui ne necessite pas d'être citer pour ma requête).
 
 
Voici ce que j'aimerai faire :
 
Afficher pour chaque location: le numéro location, les nom et prénom du client et le nombre de semaines réservées.
 
Ce que j'ai fait :  
 
Dans un premier temps facilement :
 

Code :
  1. Select location.numLocation,client.nomClient, client.prenomClient
  2. FROM location NATURAL JOIN client
  3. WHERE client.numClient=location.Client_numClient;


 
Qui me retourne bien les locations avec leurs clients (nom+prenom)
 
 
ensuite j'arrive a recuperer le nombre de semaine reserver pour une location donné avec cette requete :
 

Code :
  1. SELECT Location_numLocation, COUNT(*)
  2. FROM locsemaine
  3. GROUP BY Location_numLocation;


 
 
Par contre je ne comprends pas comment je pourrais les associés pour avoir tout les résultats voulu d'un seul coup.
 
Cdlt


 
Salut,
Si je comprends bien, tu voudrais le nombre de jours de location pour un client donné ?


---------------
Allez l'OM !
Reply

Marsh Posté le 03-11-2017 à 16:01:22    

Select loc.numLocation, cl.nomClient, cl.prenomClient, COUNT(ls.numSemaine) AS NbSemaines
FROM location loc INNER JOIN client cl ON (cl.numClient = loc.numeroclient) INNER JOIN LocSemaine ls ON (loc.numLocation = ls.numLocation)
GROUP BY loc.numLocation, cl.nomClient, cl.prenomClient
ORDER BY cl.nomClient, cl.prenomClient
 
Mais comme indiqué, je ne vois pas l'utilité de séparer en 2 tables les locations et les semaines puisque juste en mettant la date de fin de la location, tu as toutes les infos :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-11-2017 à 16:01:40    

Pas compris ou était le problème ? je répond peut-être à côté du coup :o
 
Select location.numLocation,client.nomClient, client.prenomClient, Count(*)
FROM location INNER JOIN client ON client.numClient=location.Client_numClient
 INNER JOIN locsemaine ON locsemaine.Location_numLocation = location.numLocation
Group by location.numLocation,client.nomClient, client.prenomClient;

Reply

Marsh Posté le 03-11-2017 à 16:59:56    

Grillé de 18s :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-11-2017 à 18:04:49    

Merci pour vos réponses, malheureusement la structure de la base (et les tables qui vont avec) m'ont été données comme sa et je ne dois pas y toucher.  
Juste exécuter 18 requêtes différentes dont celle-ci
 
http://zupimages.net/up/17/44/ct2j.png
 
j'essaierai vos requêtes un peu plus tard dans la soirée et je repasserai dire ce qu'il en est  :hello:

Reply

Marsh Posté le 03-11-2017 à 19:10:25    

A mon sens, les tables Periode, LocSemaine et Semaine ne devraient pas exister et dans Location, il faudrait ajouter les champs datefin (de la location) et nbPersonnes.
En fonction des dates de début et de fin de la location, c'est facile de calculer les n° de semaines et donc d'aller chercher dans la table Tarif le montant à payer.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed