Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
j'utilise une séquence pour numéroter des objet dans mon application.
Par exemple, les risques doivent avoir comme numéro
GA_1
GA_2
GA_3
GA_4
GA_5
GA_6
GA_7
etc...
j'ai donc une séquence qui me renvoi le prochain numéro.
Pour une raison que je n'arrive pas à déterminer, cette séquence avance toute seule et je me retrouve avec des trous de numérotation
GA_1
GA_2
GA_3
GA_9
GA_10
GA_37
GA_38
GA_39
GA_45
etc...
Comment est-ce possible?
Merci d'avance pour votre aide
N'étant jamais mieux servi que par soi-même, j'ai trouvé une solution à mon problème :-)
Ce n'est peut-être pas la plus élégante, mais elle fonctionne.
Si quelqu'un voit plus élaguant, plus efficace ou si des fonctions existent pour faire ça, je suis preneur.
En attendant, cela pourra peut-être servir à quelqu'un.
Les tableaux associatifs n'existant pas en pgsql (à ma connaissance tout du moins), je suis passé par data type hstore (attention, il s’agit d'une extension qu'il faut installer : CREATE EXTENSION IF NOT EXISTS hstore;)
hstore permet de stocker des couples clé/valeur et de les lire comme ceci : var_hstore->clé.
Une variable hstore s'écrit comme ça :
('clé_1=>valeur_1, clé_2=>valeur_2, clé_3=>valeur_3')::hstore
Il faut donc transformer le tableau php en un tableau pgsql de variables hstore
Pour ce faire, j'ai écrit un petit algorithme, partant du principe que mon tableau php était le suivant :
$t2 = array();
$t2[0] = array('cli_id' => 0, 'cli_nom' => 'client_0', 'cli_desc' => 'desc_client_0');
$t2[1] = array('cli_id' => 1, 'cli_nom' => 'client_1', 'cli_desc' => 'desc_client_1');
$t2[2] = array('cli_id' => 3, 'cli_nom' => 'client_2', 'cli_desc' => 'desc_client_2');
La transformation en "pgsql" donne ça :
$i = 0;
$hstore_row = "";
$hstore_array = "array[";
for ($i=0; $i<count ($t2) ; $i++) {
if ($hstore_array != "array[") $hstore_array = $hstore_array . ", ";
$hstore_row = "('";
foreach ($t2[$i] as $key => $value) {
if ($hstore_row != "('") $hstore_row = $hstore_row. ", ";
$hstore_row = $hstore_row.$key."=>".$value;
};
$hstore_row = $hstore_row."')::hstore";
$hstore_array = $hstore_array.$hstore_row;
}
$hstore_array = $hstore_array."]";
On obtient ici
$hstore_array = array[('cli_id=>0, cli_nom=>client_0, cli_desc=>desc_client_0')::hstore, ('cli_id=>1, cli_nom=>client_1, cli_desc=>desc_client_1')::hstore, ('cli_id=>3, cli_nom=>client_2, cli_desc=>desc_client_2')::hstore]
On peut alors appeler depuis php la fonction pgsql qui va bien :
$arrRetour = pgQuery($conn, "select proc_test_array_hstore('test', ".$hstore_array.")");
Dans la procédure pgsql proc_test_array_hstore on accèdera facilement aux donnée :
var_in_hstore[2]->cli_nom renverra la valeur de la clé cli_nom de la deuxième variable hstore du tableau, à savoir ici client_1
Voilou...
Bonjour,
ce que je recherche est certainement très simple, mais je me mélange un peu les pinceaux entre php et postgre
J'ai le tableau suivant en php :
$t = array();
$t[0] = array('cli_id' => 0, 'cli_nom' => 'client_0', 'cli_desc' => 'desc_client_0');
$t[1] = array('cli_id' => 1, 'cli_nom' => 'client_1', 'cli_desc' => 'desc_client_1');
$t[2] = array('cli_id' => 2, 'cli_nom' => 'client_2', 'cli_desc' => 'desc_client_2');
Cela me permet de récupérer les valeurs des champs :
Echo 'Nom 1 : '.$t2[1]['cli_nom'] .'<br>'; // renvoye client_1
Echo 'Desc 2: '.$t2[2]['cli_desc'] .'<br>'; // renvoye desc_client_2
Y a-t-il un moyen de convertir ce tableau php en tableau pgsql utilisable de la même manière et que l'on puisse passer en paramètre de type anyarray à une fonction?
Si non, quelle serait la syntaxe pgsql pour obtenir un tel tableau?
Merci d'avance.
Pages : 1