Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

concatener des des champs de plusieurs record

13 réponses
Avatar
WebShaker
Salut.

J'utilise postgreSQL 8.3

j'aimerai savoir s'il est possible de concatener des champs de plusieurs
record.
Je m'explique.
Supposons que j'ai un table contenant des albums

j'aimerai obtenir une chaine contenant la liste des albums d'un auteur
dans un seul champs... alors qu'évidement chaque album est dans un
record différent.

Est il possible de faire ca en SQL?

Merci
Etienne

10 réponses

1 2
Avatar
Sebastien Lardiere
Le 31/01/2010 22:01, WebShaker a écrit :
Salut.

J'utilise postgreSQL 8.3

j'aimerai savoir s'il est possible de concatener des champs de plusieurs
record.
Je m'explique.
Supposons que j'ai un table contenant des albums

j'aimerai obtenir une chaine contenant la liste des albums d'un auteur
dans un seul champs... alors qu'évidement chaque album est dans un
record différent.

Est il possible de faire ca en SQL?




Bonjour,

Oui, c'est faisable, en regroupant sur les attributs souhaités, et en
aggrégeant les albums.

J'imagine que les albums sont de type text ou varchar ; le plus simple
est alors de lire l'excellent article suivant :
<http://www.bortzmeyer.org/agregats-postgresql.html>

--
Sébastien
Avatar
WebShaker
Ah super.

J'y croyais pas du tout, j'avais posé la question au cas ou.
Ben c'est pile poil.

Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais ca
va le faire quand meme.
Merci beaucoup !!!

Etienne

"Sebastien Lardiere" a écrit dans le message de
news: 4b6687b7$0$17130$
Le 31/01/2010 22:01, WebShaker a écrit :
Salut.

J'utilise postgreSQL 8.3

j'aimerai savoir s'il est possible de concatener des champs de plusieurs
record.
Je m'explique.
Supposons que j'ai un table contenant des albums

j'aimerai obtenir une chaine contenant la liste des albums d'un auteur
dans un seul champs... alors qu'évidement chaque album est dans un
record différent.

Est il possible de faire ca en SQL?




Bonjour,

Oui, c'est faisable, en regroupant sur les attributs souhaités, et en
aggrégeant les albums.

J'imagine que les albums sont de type text ou varchar ; le plus simple
est alors de lire l'excellent article suivant :
<http://www.bortzmeyer.org/agregats-postgresql.html>

--
Sébastien

Avatar
Dominique Ottello
"WebShaker" écrivait :

Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais ca
va le faire quand meme.



Si MySQL : GROUP_CONCAT
Avatar
WebShaker
salut.

bon ben dans la foulée.
vu qu'il semble possible de faire des trucs plutot balaise avec postgreSQL.

j'ai une table

CREATE TABLE "tree" (
"idtree" serial NOT NULL,
"idparent" integer,
"label" text,
PRIMARY key (idtree),
FOREIGN key (idparent) REFERENCES tree (idtree)
)

Est il possible d'obtenir une liste de toute l'arborescence montant ou
descendante.

Quelques exemple s'imposent je crois

j'ai les enregistrements
1 null data000
2 1 data001
3 1 data002
4 1 data003
5 2 data004
6 2 data005
7 3 data008
8 6 data009
9 6 data019

j'aimerai en fournissant
idtree = 6
j'aimerai obtenir

- tous les id fils (lui inclue) : 6, 8, 9
- tous les id peres (lui inclue) : 6, 2, 1
- la liste des label fils (lui inclue) : data005, data009, data010
- la liste des label peres (lui inclue) : data005, data001, data000

bref. Existe t il des fonctions capable de parcourir une structure
arborescente en SQL sous postgreSQL.

Merci.
Etienne
Avatar
WebShaker
WebShaker a écrit :
salut.

bon ben dans la foulée.
vu qu'il semble possible de faire des trucs plutot balaise avec postgreSQL.

j'ai une table

CREATE TABLE "tree" (
"idtree" serial NOT NULL,
"idparent" integer,
"label" text,
PRIMARY key (idtree),
FOREIGN key (idparent) REFERENCES tree (idtree)
)

Est il possible d'obtenir une liste de toute l'arborescence montant ou
descendante.

Quelques exemple s'imposent je crois

j'ai les enregistrements
1 null data000
2 1 data001
3 1 data002
4 1 data003
5 2 data004
6 2 data005
7 3 data008
8 6 data009
9 6 data019

j'aimerai en fournissant
idtree = 6
j'aimerai obtenir

- tous les id fils (lui inclue) : 6, 8, 9
- tous les id peres (lui inclue) : 6, 2, 1
- la liste des label fils (lui inclue) : data005, data009, data010
- la liste des label peres (lui inclue) : data005, data001, data000

bref. Existe t il des fonctions capable de parcourir une structure
arborescente en SQL sous postgreSQL.

Merci.
Etienne




Bon ben je me répond a moi meme.
postgreSQL 8.4 fourni a présent

WITH RECURSIVE qui permet de faire tout ce dont j'ai besoin...
Domage que j'en sois a la version 8.3 :(

Etienne
Avatar
SQLpro
Dominique Ottello a écrit :
"WebShaker" écrivait :

Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais ca
va le faire quand meme.



Si MySQL : GROUP_CONCAT



Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De
plus c'est une fonction imbécile car particulièrement anti relationnelle !

Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui
introduit les requêtes récursives.
Aidez vous des exemples que j'ai donné dans mon cours à ce sujet :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
et en particulier de l'exemple IV-D :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Avatar
helios
SQLpro a écrit :
Dominique Ottello a écrit :
"WebShaker" écrivait :

Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire,
mais ca va le faire quand meme.



Si MySQL : GROUP_CONCAT



Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De
plus c'est une fonction imbécile car particulièrement anti relationnelle !

Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui
introduit les requêtes récursives.
Aidez vous des exemples que j'ai donné dans mon cours à ce sujet :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
et en particulier de l'exemple IV-D :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +




est il imbecile de pretendre comme un certain auteur de livres sur SQL
mettre toute les dates jusqu'à nos jours depuis Jésus christ codé sur 2
octet?
Avatar
Alain Montfranc
Il se trouve que helios a formulé :
SQLpro a écrit :
Dominique Ottello a écrit :
"WebShaker" écrivait :

Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais
ca va le faire quand meme.



Si MySQL : GROUP_CONCAT



Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De plus
c'est une fonction imbécile car particulièrement anti relationnelle !

Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui
introduit les requêtes récursives.
Aidez vous des exemples que j'ai donné dans mon cours à ce sujet :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
et en particulier de l'exemple IV-D :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +




est il imbecile de pretendre comme un certain auteur de livres sur SQL mettre
toute les dates jusqu'à nos jours depuis Jésus christ codé sur 2 octet?



Lui au moins il a été capable d'écrire un livre ET de le publier....
Avatar
JKB
Le 01-03-2010, ? propos de
Re: concatener des des champs de plusieurs record,
Alain Montfranc ?crivait dans fr.comp.applications.sgbd :
Il se trouve que helios a formulé :
SQLpro a écrit :
Dominique Ottello a écrit :
"WebShaker" écrivait :

Bon j'aurai préféré une solution SQL plutot qu'un truc propriétaire, mais
ca va le faire quand meme.



Si MySQL : GROUP_CONCAT



Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De plus
c'est une fonction imbécile car particulièrement anti relationnelle !

Vous pouvez en revanche utiliser la CTE (Common Table Expression) qui
introduit les requêtes récursives.
Aidez vous des exemples que j'ai donné dans mon cours à ce sujet :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/
et en particulier de l'exemple IV-D :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/#LIV-D

A +




est il imbecile de pretendre comme un certain auteur de livres sur SQL mettre
toute les dates jusqu'à nos jours depuis Jésus christ codé sur 2 octet?



Lui au moins il a été capable d'écrire un livre ET de le publier....



Le problème, c'est que d'autres essayent d'écrire mais restent
illisibles.

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Dominique Ottello
SQLpro écrivait :

> Si MySQL : GROUP_CONCAT

Ceci est spécifique à MySQL et n'existe pas en tant que norme SQL. De
plus c'est une fonction imbécile car particulièrement anti relationnelle !



J'avais bien écrit : Si MySQL Que ce soit une fonction « imbécile »,
peut-être.

Néanmoins, pourriez-vous m'indiquer comment réécrire la requête
ci-dessous, sans utiliser GROUP_CONCAT. Étant entendu que je ne peux
utiliser :
- que MySQL 5.1.xx
- que des tables MyISAM
- pas de procédures stockées

SELECT L.b_image, L.b_texte, L.b_mini, L.b_annexe,
GROUP_CONCAT(CONCAT_WS('^',A.a_num,A.a_image,A.a_texte,A.a_impos)
ORDER BY A.a_num SEPARATOR 'n') AS liste_annexes
FROM avia_bib_livres AS L
LEFT OUTER JOIN avia_bib_annexes AS A ON A.a_id = L.b_id
WHERE L.b_ordre = '$numero'
GROUP BY L.b_id

Merci
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
1 2