Construction d'une requete sur plusieurs tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Construction d'une requete sur plusieurs tables

Re: Construction d'une requete sur plusieurs tables

par dunbar » 22 janv. 2010, 20:11

J'ai pas d'autre solutions sorry

Re: Construction d'une requete sur plusieurs tables

par eru » 22 janv. 2010, 19:09

J'ai retenté ma chance avec d'autres types de jointures (RIGHT, LEFT, INNER...), sans aucun succès malheureusement.
#-o

Re: Construction d'une requete sur plusieurs tables

par eru » 21 janv. 2010, 20:47

ah oui désolé :oops:
alors actes_users est lié par IDPECAU a actes_pec avec (clé : IDPEC)
et par IDACAU à actes par (clé : IDAC)
C'est assez clair?

Re: Construction d'une requete sur plusieurs tables

par dunbar » 21 janv. 2010, 20:31

Et tes relations stp

Re: Construction d'une requete sur plusieurs tables

par eru » 21 janv. 2010, 20:19

J'avais évidemment bien simplifié les tables (en vrai il y en a une 10 aine d'imbriquées ) :!:
Je te mets le SQL
(merci de prendre du temps :D )
-- 
-- Structure de la table `actes_pec` = TABLE1
-- 

CREATE TABLE `actes_pec` (
  `IDPEC` int(100) NOT NULL auto_increment,
  `IDS` int(100) NOT NULL,
  `IDA` int(100) NOT NULL,
  `IDV` int(100) NOT NULL,
  `date` date NOT NULL,
  `heure` varchar(20) collate utf8_unicode_ci NOT NULL,
  `motif` text collate utf8_unicode_ci NOT NULL,
  `diagnostic` varchar(100) collate utf8_unicode_ci NOT NULL,
  `qtt` decimal(10,2) NOT NULL,
  `remise` decimal(10,2) NOT NULL,
  `sortie` varchar(15) collate utf8_unicode_ci NOT NULL default '0',
  KEY `IDPEC` (`IDPEC`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=119 ;


-- 
-- Structure de la table `actes` = TABLE2
-- 

CREATE TABLE `actes` (
  `IDAC` int(255) NOT NULL auto_increment,
  `titleg` varchar(255) collate utf8_unicode_ci NOT NULL,
  `tva` decimal(10,2) NOT NULL,
  `pu` decimal(10,2) NOT NULL,
  `categorie` int(100) NOT NULL,
  KEY `IDAC` (`IDAC`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=133 ;


-- 
-- Structure de la table `actes_users` = TABLE3
-- 

CREATE TABLE `actes_users` (
  `IDAU` int(100) NOT NULL auto_increment,
  `IDPECAU` int(100) NOT NULL,
  `IDACAU` int(100) NOT NULL,
  `IDMAU` int(100) NOT NULL,
  `IDSAU` int(100) NOT NULL default '1',
  `typeAU` varchar(100) collate utf8_unicode_ci NOT NULL,
  `dateAU` date NOT NULL,
  `heureAU` varchar(20) collate utf8_unicode_ci NOT NULL,
  `qttAU` decimal(10,2) NOT NULL,
  `remiseAU` decimal(10,2) NOT NULL,
  `ttcAU` decimal(10,2) NOT NULL,
  KEY `IDAU` (`IDAU`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1522 ;

Re: Construction d'une requete sur plusieurs tables

par dunbar » 21 janv. 2010, 20:08

Montre ta table stp

Re: Construction d'une requete sur plusieurs tables

par eru » 21 janv. 2010, 20:03

J'ai essayé, le problème est que SQL me renvoit tous les entrées de la table1 contenant ou xx ou yy, mais pas uniquement celle qui ont les deux.
(par ailleurs j'ai du ajouter un DISTINCT car il renvoyait une quantité phénoménale d'entrée :) )

Re: Construction d'une requete sur plusieurs tables

par dunbar » 21 janv. 2010, 19:06

Remplace le deuxième AND par OR :idea:

Re: Construction d'une requete sur plusieurs tables

par eru » 21 janv. 2010, 18:52

Bonjour dunbar,

Je viens d'essayer, mais malheureusement SQL ne renvoit aucune information. Si une seule clé est donnée ca marche, mais 2 il ne veut pas.

Re: Construction d'une requete sur plusieurs tables

par dunbar » 21 janv. 2010, 18:29

Salut,

Ceci donne quoi ?
$Requete = " SELECT T1.*, T2.*, T3.*
             FROM table1 T1, table2 T2, table3 T3
             WHERE T1.cle = T3.cle
             AND T3.cle = 'XX'
             AND T3.cle = 'YY' ";

Construction d'une requete sur plusieurs tables

par eru » 21 janv. 2010, 16:25

Bonjour a tous,

Encore une fois je fais appelle à vos lumières svp, car malgré mes (médiocres) connaissances et mes recherches sur le net, je n'arrive pas à construire une requête.

J'ai une base construite sur le modèle suivant :
Table 1 => Clé 1, données...
Table 2 => Clé 2, données...
Table 3 => Clé 3, Clé 1, Clé 2, données

En toute logique les entrées de la table 3 sont liées par leurs clés respectives aux tables 1 et 2 (c'est a dire une clé 1 et une clé 2 pour chaque entrée 3).
Donc pour une même entrée dans la table 1, je peux avoir plusieurs entrées associées dans la table 3.

La requete que je souhaite faire consiste a chercher quelle entrée de la table 1 est associée aux entrées de la table 3 en fonction des clé 2 que je spécifie. Ce que je souhaite c'est que la requete ne me renvoie que les entrées satisfaisant à toutes les conditions spécifiées.

Pour être plus précis si je spécifie les 'clés 2' XX et YY, alors je ne veux que les entrées de la table 1 associées à une entrée de la table 3 XX ET et une entrée de la table 3 YY. Je ne souhaite pas de OU.

Voici donc ce que j'ai déjà essayé :

Code : Tout sélectionner

SELECT Table1.* FROM table 1 JOIN table3 ON (table1.clé1= table3.clé3 AND (table3.clé2 = 'XX' OR table3.clé2 = 'YY' ));
mais le problème est que ceci me donne toutes les entrées ayant XX ou YY or je souhaite n'avoir que celle qui satisfont aux deux conditions soit XX et YY
(bien évidemment , en remplacant OR par AND, ça ne marche pas)

J'espère avoir été assez clair dans mes explications.
Merci de votre temps.