Lier tables

Résolu
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011 - 26 avril 2006 à 19:21
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011 - 27 avril 2006 à 10:16
Bonsoir, j'aurais une simple question pour vous :
Je voudrais joindre des champs de tables différrentes. J'ai pour le moment la requête :

Code :

SELECT * FROM `tarifs` WHERE `produit`='Gazoil'


Ca c'est la requête dans la table tarifs ! Mais je souhaite afficher des infos de la table stations en ajoutant :
Code :

AND `CP_station` LIKE '$_GET[NumDept]%'


J'ai fait plusieurs tests mais sans résultat ...

Merci bien

13 réponses

cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
26 avril 2006 à 22:23
Voila :

SELECT * FROM `tarifs` INNER JOIN `stations` ON tarifs.id_station = stations.id_station WHERE tarifs.produit='Gasoil' AND stations.CP_station LIKE '$_GET[NumDept]%'

Y avait un problème de cote ( ' )

merci de ton aide
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
27 avril 2006 à 00:31
salut

Pour les quotes j'en met que pour les chaine de caractere et pas pour les champs
car moi je travaille en general avec sqlserver
et la il faut mettre [...] c'est peut être remplacé par '...' pour la table et les noms de champs en mysql peut préciser ce point.

SELECT Lieu ,max(date) as max_date FROM `tarifs` INNER JOIN `stations` ON tarifs.id_station = stations.id_station WHERE tarifs.produit='Gasoil' AND stations.CP_station LIKE '$_GET[NumDept]%' group by Lieu


--> 2 enregistrements

Voila
3
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
26 avril 2006 à 20:17
Pas la moindre réponse :(
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 avril 2006 à 20:22
Salut

SELECT * FROM lignecommande
INNER JOIN produit ON
lignecommande.id_produit = produit.id_produit
WHERE ....

ou si ta base ne supporte pas les inner join

SELECT * FROM lignecommande, produit
WHERElignecommande.id_produit = produit.id_produit


Voila
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
26 avril 2006 à 20:57
Nan, j'arrive pas, j'ai fait :

SELECT * FROM `tarifs`,`stations` WHERE `produit`='Gazoil' AND `stations.CP_station` LIKE '$_GET[NumDept]%'

Une erreur ???
merci
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 avril 2006 à 21:07
Salut

lis les messages.

Il manque la liaison entre tes deux tables.
soit dans le inner join cf message precedent

soit dans la clause where cf message précédent
Il faut un champ clef et un champ cle etrangere

exemple sur ton modele

SELECT * FROM `tarifs`,`stations`
WHERE tarifs.id_station = stations.id_staiton
AND `produit`='Gazoil'
AND `stations.CP_station` LIKE '$_GET[NumDept]%'

et le tour est jouer

ou

SELECT * FROM `tarifs`
INNER JOIN `stations`
ON tarifs.id_station = stations.id_staiton
WHERE `produit`='Gazoil'
AND `stations.CP_station` LIKE '$_GET[NumDept]%'

Voila et bon SQL
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
26 avril 2006 à 21:24
Je comprends pas :

mysql_query("SELECT * FROM `tarifs` INNER JOIN `stations` ON tarifs.id_station = stations.id_station WHERE `tarifs.produit`='Gazoil' AND `stations.CP_station` LIKE '$_GET[NumDept]%'");

Avec $_GET[NumDept] => 35

Voici mes deux tables :

CREATE TABLE `stations` (
`id_station` int(11) NOT NULL auto_increment,
`nom_station` varchar(50) NOT NULL,
`adresse_station` varchar(100) NOT NULL,
`CP_station` varchar(5) NOT NULL,
`ville_station` varchar(30) NOT NULL,
`paiement` enum('Oui','Non') NOT NULL,
PRIMARY KEY (`id_station`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

CREATE TABLE `tarifs` (
`id` int(11) NOT NULL auto_increment,
`id_station` int(11) NOT NULL,
`produit` enum('Gazoil','Sans Plomb 95','Sans Plomb 98','GPL') NOT NULL,
`tarif` varchar(10) NOT NULL,
`date` date NOT NULL,
`heure` time NOT NULL,
`pseudo` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Merci beaucoup car je comprend pas le problème
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 avril 2006 à 21:37
Salut

Quel est le message d'erreur car la requete me semble correcte.

LIKE '$_GET[NumDept]%'"

Pour moi c'est cette partie qui provoque l'erreur

Car je crois que le Get n'est pas interpreté en LIKE '35%'

LIKE '" + $_GET[NumDept] + "%'"

Essaie sans le parametre pour voir le comportement.

Bon courage
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
26 avril 2006 à 21:42
Si je test dans phpmyadmin sans mettre la derniere condition :

requête SQL: Documentation

SELECT *
FROM `tarifs`
INNER JOIN `stations` ON tarifs.id_station = stations.id_station
WHERE `tarifs.produit` = 'Gazoil'
LIMIT 0 , 30

MySQL a répondu:Documentation
#1054 - Unknown column 'tarifs.produit' in 'where clause'
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
26 avril 2006 à 22:07
Salut,

Cela semble est un bug lier à la versiond de mysql

http://bugs.mysql.com/bug.php?id=13551

Enleve le champs enum de ton where regarde si ca passe

Essaie de mettre le champs dans la clause INNER JOIN
Ca peut être une facon de contourner le probleme.


SELECT *
FROM `tarifs`
INNER JOIN `stations` ON tarifs.id_station stations.id_station AND `tarifs.produit` 'Gazoil'

LIMIT 0 , 30
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
26 avril 2006 à 23:21
J'ai besoin d'une précision

Dans la table, je peux avoir :
Citation:
Lieu | Produit | tarif | date

Station1 Gasoil 1.28 2006-04-22 20:00:00
Station2 Gasoil 1.30 2006-04-24 21:40:00
Station1 Gasoil 1.27 2006-04-23 21:03:00

Et je voudrais afficher que la date la plus récente selon la station
Ici, j'aimerais récuperer la station 1 et la station avec les dates les plus récentes

Merci de votre aide
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
27 avril 2006 à 10:03
En faisant ceci :

SELECT *,max(date) as max_date FROM `tarifs` INNER JOIN `stations` ON tarifs.id_station = stations.id_station WHERE tarifs.produit='Gasoil' AND stations.CP_station LIKE '$_GET[NumDept]%' group by stations.id_station

Il me renvoie bien 2 enregistrements mais pas avec la date la plus récente !

Merci
0
cs_piep14 Messages postés 345 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 13 mai 2011
27 avril 2006 à 10:16
AH, autant pour moi, c'est bon, j'afficher date au lieu de max_date !!!
Merci nhervagault de ton aide préciseuse
0
Rejoignez-nous