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:
- 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.
- Alors je me suis penché sur une autre solution au lieu d'avoir une syntaxe
plutôt faire
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part SELECT `TABLE`.`name` FROM `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.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part SELECT `base`.`TABLE`.`name` FROM `base`.`TABLE`
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:
Sortie:
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'
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:
Sortie:
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
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.
Partager