Recherche sur plusieurs tables SQL

Résolu/Fermé
2pax.cruz - 3 mai 2012 à 18:39
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 - 3 mai 2012 à 19:32
Bonjour,

Je possède deux tables SQL et je dois faire une requête sur une mais avec un condition sur l'autre...

Je vous explique mon schéma:
- J'ai une table Promotion sur lequel la recherche est effectuée. Les champs sont id, enseigne, catégorie
- J'ai une table Enseigne. Les champs sont id, nom, province

J'aimerais afficher les Promotions appartenant a une catégorie et dont l'Enseigne se situe dans une province donnée.
A noter que le champ enseigne de la première table reprend les valeurs du champ id de la seconde table.

Pouvez-vous m'aider à créer cette requête? Je pense qu'il faut faire une jointure mais j'ai toujours eu du mal avec cela.

Je vous remercie d'avance :)


5 réponses

katsuo49 Messages postés 330 Date d'inscription vendredi 19 juin 2009 Statut Membre Dernière intervention 11 novembre 2014 25
Modifié par katsuo49 le 3/05/2012 à 18:45
SELECT * FROM Promotion WHERE categorie = 'qqch' AND enseigne = ANY (SELECT id FROM Enseigne WHERE province = 'qqch')

Pas testé mais ça devrait fonctionner sinon donne les erreurs et on verra ;)
1
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
3 mai 2012 à 18:43
Salut,

essaie SELECT * FROM Promotion WHERE categorie=ta_categorie AND enseigne IN(SELECT id FROM Enseigne WHERE province='ta_province')
0
Mais quels génies! Merci!

Je me permets de poser une autre question :)

Je n'arrive pas à créer de clef étrangère entre mes tables (champs enseigne.id et promotion.enseigne). Il me dit de vérifier les types de données, cependant, ce sont tous des int.

Je vous copie-colle les structures :

CREATE TABLE 'enseigne' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'nom' varchar(20) NOT NULL,
'adresse' tinytext NOT NULL,
'coordonnees' varchar(19) NOT NULL,
'codepostal' varchar(4) NOT NULL,
'ville' tinytext NOT NULL,
'province' varchar(4) NOT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'coordonnees' ('coordonnees')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE 'promotion' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'enseigne' int(11) NOT NULL,
'categorie' varchar(8) NOT NULL,
'produit' tinytext NOT NULL,
'reduction_type' varchar(4) NOT NULL,
'reduction' tinytext NOT NULL,
PRIMARY KEY ('id'),
KEY 'enseigne' ('enseigne')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Merci!
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
Modifié par Autumn`Tears le 3/05/2012 à 19:02
CREATE TABLE promotion (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
enseigne int(11) NOT NULL,
categorie varchar(8) NOT NULL,
produit tinytext NOT NULL,
reduction_type varchar(4) NOT NULL,
reduction tinytext NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (enseigne) REFERENCES Enseigne(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Cela devrait fonctionner.

Cordialement,

Adrien.
0

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

Posez votre question
Cela ne fonctionne pas :(


#1005 - Can't create table 'globalads.promotion' (errno: 150) (<a href="server_engines.php?engine=InnoDB&page=Status&token=ec681c9a116da23601e97c1a08720624">Détails...</a>)
CREATE TABLE promotion(
id INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
enseigne INT( 11 ) NOT NULL ,
categorie VARCHAR( 8 ) NOT NULL ,
produit TINYTEXT NOT NULL ,
reduction_type VARCHAR( 4 ) NOT NULL ,
reduction TINYTEXT NOT NULL ,
PRIMARY KEY ( id ) ,
FOREIGN KEY ( enseigne ) REFERENCES Enseigne( id )
) ENGINE = INNODB DEFAULT CHARSET = latin1;


Merci :D
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
3 mai 2012 à 19:11
Ah, peut-être que tu as besoin des guillemets alors...

CREATE TABLE 'promotion' (
'id int(11) unsigned NOT NULL AUTO_INCREMENT,
'enseigne' int(11) NOT NULL,
'categorie' varchar(8) NOT NULL,
'produit' tinytext NOT NULL,
'reduction_type' varchar(4) NOT NULL,
'reduction' tinytext NOT NULL,
PRIMARY KEY ('id'),
FOREIGN KEY ('enseigne') REFERENCES Enseigne('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
0
Je suis désolé mais cela ne fonctionne pas :
J'ai pourtant remis une simple quote après le id dans la requête que vous donnez car cette simple quote semblait manquante :s

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''promotion' ( 'id' int(11) unsigned NOT NULL AUTO_INCREMENT, 'enseigne' int(' at line 1
CREATE TABLE 'promotion'(
'id'INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
'enseigne'INT( 11 ) NOT NULL ,
'categorie'VARCHAR( 8 ) NOT NULL ,
'produit'TINYTEXT NOT NULL ,
'reduction_type'VARCHAR( 4 ) NOT NULL ,
'reduction'TINYTEXT NOT NULL ,
PRIMARY KEY ( 'id' ) ,
FOREIGN KEY ( 'enseigne' ) REFERENCES Enseigne( 'id' )
) ENGINE = INNODB DEFAULT CHARSET = latin1;
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
3 mai 2012 à 19:32
Je viens de tester de cette façon et ça semble fonctionner :


CREATE TABLE enseigne (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
nom varchar(20) NOT NULL,
adresse tinytext NOT NULL,
coordonnees varchar(19) NOT NULL,
codepostal varchar(4) NOT NULL,
ville tinytext NOT NULL,
province varchar(4) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY coordonnees (coordonnees)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE promotion (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
enseigne int(11) unsigned NOT NULL,
categorie varchar(8) NOT NULL,
produit tinytext NOT NULL,
reduction_type varchar(4) NOT NULL,
reduction tinytext NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (enseigne) REFERENCES enseigne(id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
0