Bonjour

Je vous explique ma situation. Je travaille sur une interface de gestion, utilisant HTML/PHP/MySQL. Jusqu'à maintenant on utilisait une seule Base seulement maintenant on a besoin d'isoler certaines tables dans une nouvelle base.
Du coup au niveau des requêtes faut tout changer, sauf si on ruse:
  1. J'ai d'abord pensé a ouvrir les deux tables puis tester une puis l'autre pour voir laquelle marche, mais le souci c'est qu'il y a des jointures entre des tables de la base1 et de la base2.

  1. Alors je me suis penché sur une autre solution au lieu d'avoir une syntaxe
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `TABLE`.`name` FROM `TABLE`
    plutôt faire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `base`.`TABLE`.`name` FROM `base`.`TABLE`
    Seulement le problème c'est qu'il doit y avoir un truc comme 1000 requêtes donc tout faire a la main c'est dur.


Donc j'ai crée un petit script pour faire tout sa a ma place mais j'ai besoin d'aide pour l'améliorer le voici:
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<?php
    // Récupérer associations table => base
    function create_assoc() {
        $query = mysql_query('SHOW TABLES FROM base1');
        while ($result = mysql_fetch_row($query)) {
            $assoc[strtoupper($result[0])] = '`base1`';
        }
 
        $query = mysql_query('SHOW TABLES FROM base2');
        while ($result = mysql_fetch_row($query)) {
            $assoc[strtoupper($result[0])] = '`base2`';
        }
        return $assoc;
    }
    // Remplace table par base.table
    function parser($requete) {
        $assoc = create_assoc();
        foreach ($assoc as $table => $base) {
            $requete = preg_replace('/(\s)([\`]*'.$table.'[\s\.\`\n])/', '${1}'.$base.'.${2}', $requete);
        }
        return $requete;
    }
 
$handle = mysql_connect('localhost', 'root', '');
echo parser($argv[1])."\n";
mysql_close($handle);
?>

Voila ce qu'il donne pour l'instant:
Entrée:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT *
FROM `ANNONCE`
INNER JOIN FAC_FOURNISSEUR AS FF ON FF.id = `ANNONCE`.f_id'
Sortie:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT *
FROM `base1`.`ANNONCE`
INNER JOIN `base2`.FAC_FOURNISSEUR AS FF ON FF.id = `base1`.`ANNONCE`.f_id

Entrée:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT *                           
FROM ANNONCE                                              
INNER JOIN FAC_FOURNISSEUR AS FF ON FF.id = ANNONCE.f_id
Sortie:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT *
FROM `base1`.ANNONCE
INNER JOIN `base2`.FAC_FOURNISSEUR AS FF ON FF.id = `base1`.ANNONCE.f_id

Il m'a l'air correct mais j'ai peur qu'il fasse des betises ou que sa crée un problème de sécurité. Donc j'aimerais avoir vos conseils pour l'améliorer.
Merci d'avance.