IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fonction sélection sql


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut fonction sélection sql
    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
    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');
    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
     
    <?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);
    ?>
    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.

    Vous pouvez tout copier pour tester.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Que tu mets Z++ ou tu laisses vide cela change rien c'est pareil.
    Par contre j'ai trouvé la solution.

    J'ai fait dans la fonction

    Et cela fonctionne.

    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('essai');
    //--------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($cache);
    ?>
    L'affichage me donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Array ( [0] => Array ( [0] => 0 [1] => 1 [2] => 0 [3] => n_ic [4] => 2 [5] => ytable [6] => n_a,of,a,b [7] => 11 [8] => 14 [9] => 11 [10] => 12 ) 
                 [1] => Array ( [0] => 0 [1] => 2 [2] => 0 [3] => n_la [4] => 2 [5] => ztable [6] => n_b,of,a,b [7] => 15 [8] => 18 [9] => 11 [10] => 12 ) 
                 [2] => Array ( [11] => 1 [12] => 2 [13] => sélection a [14] => 1 ) 
                 [3] => Array ( [11] => 2 [12] => 2 [13] => sélection a [14] => 2 ) 
                 [4] => Array ( [15] => 1 [16] => 2 [17] => sélection b [18] => 1 ) 
                 [5] => Array ( [15] => 2 [16] => 2 [17] => sélection b [18] => 2 )
                )
    Donc c'est bon.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction sous SQL Server
    Par GeffD dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/04/2005, 11h32
  2. fonction DATEADD [SQL SERVER]
    Par HULK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/12/2004, 17h33
  3. Réponses: 6
    Dernier message: 24/12/2004, 16h46
  4. [PostgreSQL] fonction pl/sql
    Par sam54 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/05/2003, 16h09
  5. - fonction Transact-SQL...
    Par korrigann dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/05/2003, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo