Page 1 sur 1
Lister des données sur deux tables différentes
Posté : 14 août 2007, 16:57
par worm1
Bonjour ,
Je voudrais sortir une liste de données issues deux tables avec des structures différentes donc je peux pas utiliser UNION. Y a t -il un moyen?
J'ai une table vetement avec IDVETEMENT,NOM,COULEUR,TAILLE,QUANTITE
et une table motif avec IDMOTIF,NOM,QUANTITE
et je voudrais sortir la liste des deux en les classant par QUANTITE ou NOM par exemple.
MErci pour votre aide
Posté : 14 août 2007, 17:17
par Ryle
Si tu veux les croiser, tu peux utiliser une simple jointure :
Code : Tout sélectionner
SELECT table1.champ1, table1.champ2, ... table2.champ1, ...
FROM table1, table2
WHERE table1.champX = table2.champY
...
Si tu ne veux pas les croiser, il te faut faire deux requêtes...
Posté : 14 août 2007, 19:04
par worm1
Les données n'ont rien à voir entre les deux tables donc je peux pas faire de jointure. Et les deux requêtes vont pas fonctionner pour mes filtres . Je vais modifier la structure des mes tables pour avoir des champs identiques tant pis.
Merci pour l'aide

Posté : 14 août 2007, 23:31
par Sékiltoyai
Bah sinon, tu fais ca :
Code : Tout sélectionner
(SELECT IDVETEMENT,NOM,QUANTITE,COULEUR,TAILLE FROM vetement)
UNION
(SELECT IDMOTIF,NOM,QUANTITE,NULL,NULL FROM motif)
Posté : 14 août 2007, 23:51
par worm1
Exact ,je savais pas qu'on pouvait faire comme ca avec UNION.
Merci

Posté : 15 août 2007, 00:18
par Ryle
euh... je vais poser une question bête mais... comment tu comptes faire ensuite pour savoir ce qui vient d'où ?
Tu me diras c'est peut être uniquement de l'affichage et y aura ni lien, ni formulaire ou autre, mais sinon je ne vois vraiment pas ensuite comment gérer un lien ou autre me disant id = 12 sans savoir si c'est celui d'un motif ou d'un vetement....
Posté : 15 août 2007, 00:20
par Sékiltoyai
Pour savoir d'où ca vient, c'est tout con :
Code : Tout sélectionner
(SELECT IDVETEMENT,NOM,QUANTITE,COULEUR,TAILLE, "vetement" AS Type FROM vetement)
UNION
(SELECT IDMOTIF,NOM,QUANTITE,NULL,NULL, "motif" FROM motif)
Posté : 15 août 2007, 00:31
par Ryle
oui, certes, on peut aussi simplement tester si couleur ou taille sont null ... mais à ce compte là, je vois pas l'intérêt d'un union qui à mon sens (j'ai pas vérifié mais j'imagine) sera plus couteux en ressource que deux requêtes distinctes, nottament parce qu'on pourra libérer les résultats de la première avant de passer à la seconde, et qu'on ne ramenera pas des colonnes inutiles de valeurs null...
'fin après c'est qu'une opinion tardive et je ne connais pas le contexte alors je vais pas insister, mais ce n'est pas à mon avis la meilleur façon de procéder

Posté : 15 août 2007, 00:56
par Sékiltoyai
Non, ce n'est peut être pas la meilleure facon de procéder, il faudra bencher pour savoir. Mais pour répondre à ta question, c'est juste que si on a deux requètes qu'il est particulièrement justifié d'unir :
Alors il est très simple de les réunir sans s'emmeler les pinceaux :
Code : Tout sélectionner
(SELECT nom, 1 AS table FROM table1)
UNION
(SELECT nom, 2 FROM table2);
Après, dire ce qui est le mieux entre faire ceci et faire les 2 requètes séparément, c'est de la littérature, et c'est une autre affaire.

Posté : 15 août 2007, 01:46
par worm1
Vous battez pas

Pour mon cas un UNION est plus facile pour gérer ensuite le traitement des données. Effectivement c 'est plus gourmand en ressources mais ca reste largement acceptable vu le peu de données que je dois sortir

Posté : 15 août 2007, 12:28
par Truc
... ca reste largement acceptable vu le peu de données que je dois sortir

C'est surtout en rapport du nombre de données à traiter avant de sortir un "peu de données"
Posté : 15 août 2007, 13:09
par worm1
Oui je me suis mal exprimé, j'ai pas beaucoup de données en base ( 20 -30 tout au plus) .