sous requete sur autre bd

bothcry
Invité n'ayant pas de compte PHPfrance

29 juin 2005, 13:34

hello !

qq'un saurait s'il est possible de faire une sous requete qui aille se servir dans une autre base que celle de sa requete parente ?

du genre
select * from toto where id = (select id from popo)

premier select : base1
deuxieme select : base2

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 juin 2005, 13:38

C'est impossible

Une requête ne se fait que sur 1 base de données à la fois

Si c'est vital, tu peut faire une copie de ta table dans la base de données qui t'intéresse
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

29 juin 2005, 13:39

Non, ça ne fonctionnera pas. Enfin je ne crois pas et en plus, il faudrait une syntaxe adequat du style:

Code : Tout sélectionner

select * from base1.toto where id = (select id from base2.popo)
Mais je ne crois pas qu'on puisse faire une connexion simultanée sur deux bases en même temps pour une seule et unique requête.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 juin 2005, 14:12

Une requête ne se fait que sur 1 base de données à la fois
Ça dépend...
ColdFusion te permet (en tout cas, quand j'utilisais la version 4.0, il permettait !)
de lancer une requête SQL impliquant plusieurs bases simultanément.
PHP, je ne sais pas. J'ai jamais essayé.

Au cas où ce serait possible (on ne sait jamais),
tu auras quand même peut-être intérêt à répliquer certaines tables
pour les regrouper dans une même base.

En fait, ta question concerne plus MySQL que PHP.
Je te suggère donc une petite recherche sur http://www.mysql.com... ;)

Bothcry
Invité n'ayant pas de compte PHPfrance

29 juin 2005, 14:35

apres prise d'info, y s avere qu'avec mysql il est possible de changer de base entre requete et sous requete

suffit de faire select * fril basededonnée.table
etc

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

29 juin 2005, 14:43

oui c'est possible normalement

il y a un exemple ici : http://dev.mysql.com/doc/mysql/fr/use.html

L'exemple suivant accède à la table author de la base db1 et à la table editor de la base db2 :

Code : Tout sélectionner

SELECT author_name,editor_name FROM author,db2.editor WHERE author.editor_id = db2.editor.editor_id;

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 juin 2005, 14:48

Un gage pour Zeus ! :langue:

Tu connais le tarif... :lol:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

29 juin 2005, 14:58

@Albat : même pas en rêve ... :lol:

Sinon vous m'en bouchez un coin ... :shock:

J'ai cherché à faire ça et malgrès quelques recherches, j'ai finit par faire des vues à partir de tables temporaires

Mince alors, j'aurais su ça, je me serais vachement moins embeter ... :evil:

Et côté performances ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Pedrounet27
Invité n'ayant pas de compte PHPfrance

06 juil. 2005, 17:32

Merci pour ces informations:

Malgré celà, il me reste (pour le problème que je rencontre personnelement) un léger problème.

Comment doit-on procéder si ces accès aux bases bd1 et bd2 doivent se réaliser obligatoirement avec des mots de passes?

Même si l'on utilise USE pour définir la base par défaut, où faut-il inscrire les login et motdepasse de la base bd2 ?

Merci pour vos idées :)

Eléphant du PHP | 91 Messages

07 juil. 2005, 12:08

Salut,

Je ne suis pas expert sur MySQL, donc je ne peux garantir la pertinence de mes réponses à 100%

Deux choses :

1/ La table "user" est dans la base système MySQL. Donc les user sont définis au niveau serveur MySQL. Le serveur MySQL gére plusieurs base.
(Je n'ai pas pas réussi à vérifier ça dans la doc, mais c'est ainsi que travail SQL Server de microsoft et ASE de SYBASE)

2/ La syntaxe de GRANT permet de donner des droits à un login sur 2 bases différentes. Par contre en regardant la syntaxe de plus prés il semble que la granularité de la commande est au niveau du serveur ou d'une base ou d'une table de la base par défaut de l'utilisateur

Code : Tout sélectionner

GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON {tbl_name | * | *.* | db_name.*} TO user
Est il possible de donner des droits sur db_name..tbl_name ? C'est à dire au nievau d'une table d'une autre base. A tester!!!
(note bien les deux points car la syntaxe compléte doit être db_name.[owner_user_table].tbl_name pour respecter la norme SQL ANSI)

source Syntaxe de GRANT
http://www.nexen.net/docs/mysql/annotee ... lien=grant

J'espére que ceci t'aidera un peu.