Bonjour,
Etant novice dans l'utilisation de sql j'ai besoin de votre aide sur une jointure. J'ai lu pas mal de docs mais je suis un peu dépassé par la complexité de la requête, et je sais pas si c'est faisable en une seule.
J'ai deux tables :
Je veux sélectionner toutes les stations dont il existe un prix dans la table prix pour le type gpl par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE TABLE `stations` ( `id` int(11) NOT NULL, `nom` varchar(50) NOT NULL, `commune` varchar(50) NOT NULL, `adresse` varchar(100) NOT NULL, `lat` float default NULL, `lon` float default NULL, UNIQUE KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1_general_ci COMMENT='Stations services' CREATE TABLE `prix` ( `id` int(11) NOT NULL, `type` ENUM('diesel','sp95','gpl'), `prix` float default NULL, `maj` date default NULL, KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1_general_ci COMMENT='Prix du carburant'
J'y arrive par le code suivant
Par contre j'aimerais aussi sélectionner le dernier prix enregistre pour chacune de ces stations. La table prix peut contenir plusieurs enregistrement pour la même id avec des date de maj différentes. Peut on joindre le dernier prix en une seule requête ou il faut faire plusieurs requêtes ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT * FROM `stations` WHERE `lat` IS NOT NULL AND `lon` IS NOT NULL AND (SELECT COUNT(*) FROM `prix` WHERE `type` = 'gpl' AND prix.id=stations.id)>0 ORDER BY POW(`lat`-42,2)+POW(`lon`-2,2) ASC LIMIT 0,10
J'ai l'impression que c'est possible mais ça me dépasse un peu. Quelqu'un pourrait m'aider sur ce coup la ?
Merci
Partager