Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#76 Re : Général » Afficher le guillemet simple ? » 19/11/2013 09:35:39
Merci, j'avais effectivement loupé qqc!
Pourquoi l'anti slash ne fonctionne pas dans ce cas? (c'est ce qui est donné comme solution dans certaines formations !)
#77 Re : Général » Afficher le guillemet simple ? » 18/11/2013 14:32:58
impec
Y a t il qqc dans la doc que j'aurais loupé?
#78 Général » Afficher le guillemet simple ? » 18/11/2013 14:26:50
- damalaan
- Réponses : 5
Bonjour,
Une petite question toute bête que je me permets de poser n'ayant pas de trouvé de réponse dans la doc :
comment afficher un guillemet simple dans une chaine de caractère, du style
coucou c'est moi j'ai tenté ceci
select 'coucou c'\moi'
select "coucou c\'est moi"sans succès !
je suis sous pgadminIII, pg9.3, encodage UTF8
merci
#79 Re : Général » Sélectionner une série discontinue de valeurs dans une colonne » 08/11/2013 12:01:00
Bonjour
Vous pouvez utiliser l'opérateur IN qui sert à vérifier l'appartenance des valeurs d'un enregistrement
SELECT* FROM matable WHERE monchamp IN (valeur1, valeur2, valeur3, ........)
SELECT * FROM table WHERE gid IN(125, 145, 236,111,... )Le contraire étant NOT IN
#80 Re : Général » [RESOLU] Colonne à contenu fixe » 14/08/2013 13:23:23
Bonjour
un lien vers la doc
http://docs.postgresql.fr/9.2/sql-altertable.html
ce qui peut donner pour la colonne toto de la table tbl_titi
ALTER TABLE tbl_titi
ALTER COLUMN toto SET DEFAULT 'la_valeur';#81 Re : Général » transfert de données de MS ACCESS vers POSTGGRES SQL » 21/06/2013 14:10:05
Sans message d'erreur difficile de t'aider !
Il y a des choses qui peuvent poser problème comme le type booléen :
les valeurs sous access sont 0 et -1 (faux, vrai)
sous postgres c'est false et true (ce qui quand même plus logique!)
c'est peut être des incompatibilité de ce type qui provoque l'erreur, ou des caractères accentués
#82 Re : Installation » Probleme installation PostgreSQL Windows 7 » 14/06/2013 08:31:20
J'ai eu une fois un problème d'installation sur W7 : j'ai installé postgres ailleurs que dans Program files, l'espace semblait poser problème.
#83 Re : PHP » créer un tableau multi dimensionnel à partir d'une requête » 02/04/2013 16:33:56
j'ai fini par faire ça, cela fonctionne, mais s'il y a plus simple, je suis preneur!
$sql= "select ana_id, sta_date, arrondi(sta_valeur, ana_id) from tbl_stat_sta ";
$sql.="where sta_esp = 1 and ana_id in(1,2,3,4) and (sta_date between '2011-01-01' and '2011-01-31') order by ana_id,sta_date;";
$i=0;
$result=pg_query($dbconn, $sql);
$tableau =array();
while ($row = pg_fetch_row($result))
{
$ligne = "['".$row[1]."', ".$row[2]."]";
if ($row[0]===$cle)
{
$tableau[$cle] .= ",".$ligne;
}
else{
$cle=$row[0];
$tableau[$cle].=$ligne;
}
}
var_dump($tableau);
$j= count($tableau);et en faisant un $tableau[1] j'obtiens bien les données pour ana_id = 1
['2011-01-04', 44.64],['2011-01-05', 44.70],['2011-01-06', 43.26],['2011-01-07', 44.02]#84 Re : PHP » créer un tableau multi dimensionnel à partir d'une requête » 02/04/2013 14:33:43
je laisse tomber json, je n'arrive pas à comprendre comment passer ce truc en JS à google chart.
en revanche on peut passer un format du genre :
['2011-01-04', 44.64], ['2011-01-05', 44.70], ['2011-01-06', 43.26]ça fonctionne parfaitement pour l'avoir déjà tester.
maintenant ma difficulté est de pouvoir créer un tableau du genre:
[
1,[[ "2011-01-04","44.64"],[ "2011-01-04","44.53"],[ "2011-01-05","44.90"]],
2,[[ "2011-01-04","37.69"],[ "2011-01-04","34.23"],[ "2011-01-05","34.20"]]
]afin de mon tableau avec echo $tab[1] qui me renverrait :[ "2011-01-04","44.64"],[ "2011-01-04","44.53"],[ "2011-01-05","44.90"]
les indices du tableau étant les valeurs de ana_id de ma requête de départ
#85 Re : PHP » créer un tableau multi dimensionnel à partir d'une requête » 30/03/2013 21:40:29
c'est bien ce que j'ai fait
select row_to_json(row) from (
select
ana_id as libelle,
sta_date as jour,
arrondi(sta_valeur, ana_id)as valeur
from tbl_stat_sta
where
sta_esp = 1 and
(ana_id between 1 and 2) and
(sta_date between '2011-01-01' and '2011-01-31')
order by ana_id, sta_date) row;mais je ne sais pas comment récupérer le résultat de cette requête en php sous forme de tableau json!
#86 Re : PHP » créer un tableau multi dimensionnel à partir d'une requête » 30/03/2013 19:10:02
Le projet est de générer des graphiques "à la volée" en récupérant les données d'une requête
select
ana_id as libelle,
sta_date as jour,
arrondi(sta_valeur, ana_id)as valeur
from tbl_stat_sta
where
sta_esp = 1 and
(ana_id between 1 and 2) and
(sta_date between '2011-01-01' and '2011-01-31')
order by ana_id, sta_dateil me faut un graphique différent par ana_id (ici 2 mais en réalité environ 20).
J'ai donc découvert que les nouvelles versions de postgresql offrait le format json; c'est pourquoi je voudrais récupérer les données json de ma requête pour les passer ensuite à l'api google chart (je ne sais pas encore comment, mais il lui faut du json!!)
#87 Re : PHP » créer un tableau multi dimensionnel à partir d'une requête » 30/03/2013 08:57:31
je viens de découvrir que l'on peut générer du json directement sous postgres :
select row_to_json(row) from (
select
ana_id as libelle,
sta_date as jour,
arrondi(sta_valeur, ana_id)as valeur
from tbl_stat_sta
where
sta_esp = 1 and
(ana_id between 1 and 2) and
(sta_date between '2011-01-01' and '2011-01-31')
order by ana_id, sta_date) row;Comment pourrais-je récupérer ça en php ?
#88 PHP » créer un tableau multi dimensionnel à partir d'une requête » 30/03/2013 08:22:32
- damalaan
- Réponses : 8
Bonjour,
Il faut je récupère le résultat d'une requête dans un tableau multimensionnel pour ensuite le passer dans une boucle javascript pour générer des graphiques avec l'api goocle chart.
Dans un premier temps, je dois donc récupérer le tableau :
la requete :
$sql= "select ana_id, sta_date, arrondi(sta_valeur, ana_id) from tbl_stat_sta ";
$sql.="where sta_esp = 1 and (ana_id between 1 and 2) and (sta_date between '2011-01-01' and '2011-01-31') ";
$sql.="order by sta_date;";en fait pour chaque valeur de ana_id je dois construire un nouveau tableau... et c'est là que ça coince!!
pour l'instant j'ai ça mais ça
//construction du tab de données
$i=0;
$result=pg_query($dbconn, $sql);
while ($row = pg_fetch_array($result))
{
if ($i===0) {
$tableau= "data.setValue(".$i.", 0, '".$row[1]."');";
$tableau .= "data.setValue(".$i.", 1, ".$row[2].");";
}
else
{
$tableau .= "data.setValue(".$i.", 0, '".$row[1]."');";
$tableau .= "data.setValue(".$i.", 1, ".$row[2].");";
}
$i++;
}mais je ne prends pas les différentes valeurs ana_id en compte
merci
#89 Re : Général » crosstab avec nb de colonnes inconnues » 26/03/2013 14:29:23
Je m'en doutais un peu, mais je voulais avoir confirmation d'expert!
dommage
#90 Général » crosstab avec nb de colonnes inconnues » 25/03/2013 21:45:52
- damalaan
- Réponses : 2
Bonjour,
J'utilise la fonction crosstab(text source_sql, text category_sql) pour afficher les données sous forme de tableau croisé.
Mon souci est que je ne connais pas forcément à l'avance le nombre de colonnes, or cette fonction impose de nommer à la construction de la requête toutes les colonnes avec leur type.
Y a t il un moyen de contourner celà et de rendre la fonction plus "dynamique"?
merci
#91 Re : PL/pgSQL » RESOLU - récupération résultat requête dans une variable » 19/03/2013 14:30:59
C'est effectivement plus simple!
Voici donc la fonction finale
CREATE OR REPLACE FUNCTION arrondi(NUMERIC, INTEGER)
RETURNS NUMERIC as
$$
DECLARE
nb INTEGER;
BEGIN
SELECT INTO nb ana_decimal FROM tbl_analyse_ana WHERE ana_id = $2;
RETURN ROUND($1, nb);
END;
$$
LANGUAGE plpgsql VOLATILE#92 Re : PL/pgSQL » RESOLU - récupération résultat requête dans une variable » 19/03/2013 09:34:59
L'utilisation de CASE WHEN me parait fastidieuse (ça va me faire des CASE WHEN à rallonge s'il faut que je traite tous les cas ).
Pour ce qui est du caractère étrange : chaque analyse est exprimée dans une unité spécifique avec un nombre de décimale....spécifique (exigence normative!). Je pourrais faire un champ par analyse, mais en terme de modélisation, c'est complètement foireux!
La requête telle qu'elle est faite ne renvoie qu'un seul résultat, ma question était donc de savoir s'il existe un moyen plus simple de mettre de résultat dans une variable directement du genre :
mavar := SELECT ana_decimal FROM tbl_analyse_ana WHERE ana_id = critplutôt que de passer par un curseur, sachant que toute façon il n'y aura qu'une ligne à parcourir.
#93 PL/pgSQL » RESOLU - récupération résultat requête dans une variable » 18/03/2013 22:09:06
- damalaan
- Réponses : 4
Bonjour,
en lien avec mon post http://forums.postgresql.fr/viewtopic.php?id=2548, j'ai fait une fonction pl/pgsql pour :
-en fonction de ana_id récupérer ana_decimal (le nombre de decimale dont j'ai besoin)
-arrondir le nombre passer en paramètre avec le nombre de decimale
CREATE OR REPLACE FUNCTION arrondi(NUMERIC, INTEGER)
RETURNS NUMERIC AS
$$
DECLARE
s RECORD;
crit INTEGER := $2;
nb INTEGER;
cur CURSOR FOR SELECT ana_decimal FROM tbl_analyse_ana WHERE ana_id = crit;
BEGIN
OPEN cur;
LOOP
FETCH NEXT FROM cur INTO s;
EXIT WHEN NOT FOUND;
nb := s.ana_decimal;
END LOOP;
CLOSE cur;
RETURN round($1, nb);
END
$$
LANGUAGE PLPGSQL VOLATILE;contenu de tbl_analyse_ana
ana_id ana_decimal
1 2
2 0
3 1exemple de fonctionnement
select arrondi(12.1234, 1) ==>12.12
select arrondi(12.1234, 2)==>12ma question est : n'y a t il pas plus simple !?
merci
#94 Général » Modifier un arrondi en fonction de la valeur d'un champ » 13/03/2013 22:05:03
- damalaan
- Réponses : 1
Bonjour,
dans une table tbl_stat_sta je stocke des données sta_valeur dont le format peut changer en fonction de ana_id.
sta_valeur est toujours numérique mais peut être entier, décimal avec 2 ou 3 chiffres après la virgule.
j'ai donc assigné à sta_valeur la propriété numeric (7,3) permettant de couvrir tous mes besoins.
ma question est donc la suivante: comment puis je controler l'affichage lors des requêtes (calcul de moyenne)
pour ana_id = 1, je voudrais un affichage entier, donc 0 décimal
pour ana_id = 2, un décimal à 1 chiffre après la virgule
etc
Je pensais stocker cette propriété dans la table tbl_analyse_ana, puis l'utiliser dans un round, mais je ne sais comment récupérer la précision derrière la virgule?
CREATE TABLE tbl_stat_sta
(
sta_id bigserial NOT NULL,
sta_date date,
sta_esp integer,
sta_valeur numeric(7,3),
ana_id integer,
CONSTRAINT sta_id PRIMARY KEY (sta_id),
CONSTRAINT ana_id FOREIGN KEY (ana_id))CREATE TABLE tbl_analyse_ana
(
ana_id integer NOT NULL,
ana_libelle character(50),
CONSTRAINT ana_id PRIMARY KEY (ana_id)
)merci
#95 Re : Général » requete pour affiché une semaine » 12/03/2013 15:42:44
Au final dans quelle application vous voulez afficher votre tableau : tableur, navigateur, sortie de fichier csv....?
Vu comme ça, si vous voulez un affichage de ce type dans pgadmin, je ne vois pas bien comment c'est possible, à moins de concaténer les champ casse_€ et casse_unité au préalable
#96 Re : Général » Utilisation de crosstab » 07/03/2013 17:52:42
la version de postgres 1.16.1?? c'est pas plutôt pgadmin?
après je préfère laisser les pros s'exprimer sur comment trouver la fonction s'il elle n'est pas là!
#97 Re : Général » Utilisation de crosstab » 07/03/2013 17:41:34
dans la base où tu veux l'installer, tu ouvres l'éditeur SQL, puis tu vas chercher le fichier tablefunc.sql qui se trouve dans ton_dossier_install_postgresql\share\contrib, puis F5
et ça te crée les fonctions crosstab
#98 Re : PL/pgSQL » RESOLU - utilisation d'un curseur » 04/03/2013 16:34:29
ça y est !!
-- Function: test()
DROP FUNCTION test();
CREATE OR REPLACE FUNCTION test()
RETURNS text AS
$BODY$
DECLARE
s RECORD;
s1 TEXT := '';
cur CURSOR FOR SELECT ana_id FROM tbl_analyse_ana ORDER BY ana_id;
BEGIN
OPEN cur;
LOOP
FETCH NEXT FROM cur INTO s;
EXIT WHEN NOT FOUND;
s1 := s1 || ';' || s.ana_id ;
END LOOP;
CLOSE cur;
RETURN s1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION test() OWNER TO postgres;La condition de sortie de la boucle était mal placé : après concaténation au lieu d'avant !
Pourriez-vous m'indiquer un bon tuto sur le plpgSQL (à l'instar de celui ci pour plsql ftp://ftp-developpez.com/sheikyerbouti/ … l_sql.pdf)?
#99 Re : PL/pgSQL » RESOLU - utilisation d'un curseur » 04/03/2013 09:47:03
J'ai ajouté la ligne EXIT WHEN NOT FOUND, j'ai initialisé s1.... et toujours rien
CREATE OR REPLACE FUNCTION test()
RETURNS text AS
$BODY$
DECLARE
s RECORD;
s1 TEXT := '';
cur CURSOR FOR SELECT ana_id FROM tbl_analyse_ana;
BEGIN
OPEN cur;
LOOP
FETCH cur INTO s;
s1 := s1 || ';' || s.ana_id || ';';
EXIT WHEN NOT FOUND;
END LOOP;
CLOSE cur;
RETURN s1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION test() OWNER TO postgres;#100 Re : PL/pgSQL » RESOLU - utilisation d'un curseur » 03/03/2013 21:35:36
ok pour le "EXIT WHEN NOT FOUND".
par contre pour initialiser la variable, comment fait on?