Requête sur plusieurs tables

ViPHP
ViPHP | 3607 Messages

09 juil. 2006, 09:31

Bonjour à tous,
je souhaiterai faire un SELECT sur plusieurs tables à la fois...
j'ai trois tables différentes, qui contiennent toute le même champs:`poubelle`
je voulais savoir si on pouvait faire qqch comme ça:

Code : Tout sélectionner

SELECT * FROM `table1`,`table2`,`table3` WHERE `poubelle`='oui'
et si avec une telle requête il est possible de savoir à quelle table appartient l'enregistrement...
merci d'avance

Mammouth du PHP | 19672 Messages

09 juil. 2006, 10:36

Si tu avais essayé avant de poser la question, cette question aurait été bien différente parce que tu aurais eu un beau message d'erreur t'indiquant un problème d'ambiguïté sur le champ "poubelle". Ensuite, ça te ferait un beau produit cartésien pour la simple raison que tu n'as aucune clause de jointure.

Cette requête n'est pas logique et ta question pas claire non plus : d'autre part, elle semble indiquer un problème de conception.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 juil. 2006, 10:39

Si tu avais essayé avant de poser la question
(...)
ça te ferait un beau produit cartésien.
Finalement, c'est p't-être pas plus mal qu'il n'ait pas osé essayer... :langue:

ViPHP
ViPHP | 3607 Messages

09 juil. 2006, 10:42

Bon pour la question pas claire, je vais essayer de l'être un peu plus...
sur mon site, j'ai trois modules, où les utilisateurs peuvent ajouter des posts...
J'ai trois tables, une pour chaque module, elle ont toute un champ `poubelle` enum('oui','non') default 'non'
Lorsque l'on supprime une entrée, on change le champ poubelle à oui, et dans la partie admin, je veu afficher les posts supprimé, et je voulais savoir s'il était possible d'éviter de faire une requête par module...
Voilà, est-ce qu'après ces explications, tu voits toujours un problème de conception...?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

09 juil. 2006, 10:48

Je peux me tromper, mais n'aurait-il pas été plus opportun de créer une seule table
en y incluant un champ numero_module, par exemple ?

Si les structures de tes 3 tables sont identiques,
y a plus de 99 chances sur 100 que ce soit la solution... 8)

Mammouth du PHP | 19672 Messages

09 juil. 2006, 10:50

Peut-être bien : pourquoi tripler un champ au lieu d'avoir par exemple une table "sujet_actif" où tu pourrais stocker les identifiants des sujets actifs de chaque module assortis d'un identifiant pour le module lui-même : tu n'aurais dans ce cas qu'une table à consulter, même pour n'avoir que les sujets inactifs (poubelle = oui) avec une jointure externe et une clause GROUP BY sur l'identifiant du module.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

09 juil. 2006, 10:58

Houlà... ça me parait compliqué...
pour albat:
les trois tables n'ont pas du tout la même structure...
Bon si j'essaye de comprendre...
je cré une table poubelle:

Code : Tout sélectionner

CREATE TABLE `poubelle`( `module` enum('module1','module2','module3'), `id_post` int(10))
quequechose comme ça... :? et quand je veu afficher la poubelle dans l'administration, je fait un select sur cette table...? c'est ça?
bon le problème c'est comment je fait dans mes modules pour afficher les messages qui ne sont pas à la poubelle?
je vais pas vérifier dans la table poubelle si l'enregistrement que je vais afficher a son id dans la table poubelle... ça me parait pas optimisé

Mammouth du PHP | 19672 Messages

09 juil. 2006, 11:07

Ben tu devras faire une jointure.

Sinon, en revenant à ta première idée, tu ne pourras pas distinguer à quel module appartient telle ou telle ligne et tu devras faire trois requêtes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

09 juil. 2006, 11:19

et faire une jointure, c'est pas un peu plus lent? que si le champ est directement dans la table?
Ce que je veu optimiser c'est en premier lieu l'affichage des message qui ne sont pas à la poubelle...
donc si c'est un peu lent pour l'affichage de la poubelle dans la partie admin, c'est pas grave on sera pas beaucoup à le ressentir...
je peu faire trois requête c'est pas un problème

Mammouth du PHP | 19672 Messages

09 juil. 2006, 11:25

À moins de travailler sur des tables de très grande taille, du genre 50000 lignes et davantage par table, la différence ne sera pas mesurable en tous cas pas à l'oeil, d'autant moins si tu utilises le moteur MyISAM.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

09 juil. 2006, 11:41

Bon ben finallement, je part sur la base de trois requête pour afficher la poubelle...parce que je sais pas faire les jointures :-)
merci quand-même... :wink: