Bonjour
Je voudrai créer une fonction génératrice de sélection sql à partir d'une table.
Mon but et de raccourcir la taille du fichier sql.php de 16 Ko à 1 ko. Cette table contient une
liste de requêtes sql qui s'insère dans un tableau array() unique.
Par conséquent j'ai fait une fonction qui fait 1ko. Mon problème est
que cette fonction fonctionne correctement que si la table ne contient qu'une seule sélection
sql. Si j'ai 2 ou plusieurs sélèction dans la table. La fonction ne me garde que la dernière
sélèction dans le tableau unique.
Donc la fonction à chaque sélection sql écrase la sélection sql antérieure dans le tableau array().
Que puis-je faire pour résoudre ce problème ?
Base de donnée test
sql.php
Code : 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 CREATE TABLE `xtab_table` ( `n_ic` int(11) NOT NULL, `n_table` int(11) NOT NULL auto_increment, `parent` int(11) NOT NULL, `cle` varchar(50) NOT NULL, `of` int(1) NOT NULL, `tbl` varchar(250) NOT NULL, `cha` text NOT NULL, `debut` int(11) NOT NULL, `fin` int(11) NOT NULL, `cle_pos` int(11) NOT NULL, `of_pos` int(11) NOT NULL, PRIMARY KEY (`n_table`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; INSERT INTO `xtab_table` (`n_ic`, `n_table`, `parent`, `cle`, `of`, `tbl`, `cha`, `debut`, `fin`, `cle_pos`, `of_pos`) VALUES (0, 1, 0, 'n_ic', 2, 'ytable', 'n_a,of,a,b', 11, 14, 11, 12), (0, 2, 0, 'n_la', 2, 'ztable', 'n_b,of,a,b', 15, 18, 11, 12); CREATE TABLE `ytable` ( `n_a` int(11) NOT NULL auto_increment, `of` int(11) NOT NULL, `a` varchar(250) NOT NULL, `b` varchar(250) NOT NULL, PRIMARY KEY (`n_a`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `ytable` (`n_a`, `of`, `a`, `b`) VALUES (1, 2, 'sélection a', '1'), (2, 2, 'sélection a', '2'); CREATE TABLE `ztable` ( `n_b` int(11) NOT NULL auto_increment, `of` int(11) NOT NULL, `a` varchar(250) NOT NULL, `b` varchar(250) NOT NULL, PRIMARY KEY (`n_b`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `ztable` (`n_b`, `of`, `a`, `b`) VALUES (1, 2, 'sélection b', '1'), (2, 2, 'sélection b', '2');
Le print_r() affiche les données de la dernière sélection. Hélas il ne contient pas les données de la sélection antiérieure.
Code : 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 <?php session_start(); $connect=mysql_connect("localhost","root",""); mysql_select_db('test'); //--------sélection des données contenues dans xtable pour générer des sélection sql $zaa=mysql_query("SELECT n_ic,n_table,parent,cle,of,tbl,cha,debut,fin,cle_pos,of_pos FROM xtab_table"); $nbr=mysql_num_rows($zaa); $val=array();$z=0;$keys_a=range(0,10); while($rsa=mysql_fetch_row($zaa)){$val[$z++]=array_combine($keys_a,$rsa);} //--------sélection de table xtable pour générer des sélection sql //--------séléction for($i=0;$i<$nbr;$i++){ if($val[$i][0]!=""){ $zab=mysql_query("SELECT ".$val[$i][6]." FROM ".$val[$i][5].""); $z=0; $vol=array(); $keys_c=range($val[$i][7],$val[$i][8]); while($rsc=mysql_fetch_row($zab)){ $vol[]=array_combine($keys_c,$rsc); } } } //$cache=array_merge($val,$vol); print_r($vol); ?>
Vous pouvez tout copier pour tester.
Partager