Et à l'utilisation: SELECT id_action, join(id_fiche)
FROM transi
GROUP BY id_action;
L'avantage de cette méthode, c'est qu(il te retourne un tableau, donc si derrière ton front-end sait les gérer, c'est parfait. (sinon, tu auras un texte avec les valeurs entre virgules...)
Enfin, si tu est un peu plus joueur, car après tout les nombres sont bon pour l'ordinateur, mais toi ce sont les données qui t'interessent, tu peux faire ceci:
Préparation: CREATE PROCEDURAL LANGUAGE plpgsql;
CREATE FUNCTION join_text_merge(TEXT[]) RETURNS TEXT
LANGUAGE 'plpgsql' AS '
BEGIN
RETURN array_to_string(1,ドル \', \');
END;
';
Et tu peux ensuite faire de requetes plus intelligentes: SELECT actions.nom AS action,
join(fiches.nom) AS fiches
FROM transi, actions, fiches
WHERE transi.id_action = actions.id_action
AND transi.id_fiche = fiches.id_fiche
GROUP BY action;
Note: bonus, les deux fonctions join peuvent vivrent ensemble.
[^] # Re: A la mimine
Posté par Christophe --- . En réponse au message Liaison N à N. Évalué à 5.
Du côté de MySQL il peut y avoir la fonction CONCAT_WS. Note bien que je n'ai pas testé:
http://dev.mysql.com/doc/refman/4.1/en/string-functions.html(...)
SELECT id_action, CONCAT_WS(',', CAST(id_fiche AS CHAR)) AS fiche
FROM transi GROUP BY id_action;
...avec pour effet secondaire de retourner un texte, à reconvertir derrière... Enfin, si CONCAT_WS fonctionne dans ce contexte :-/
Sinon, tu peux le faire avec PostgreSQL de la manière suivante, que j'ai vérifié:
Préparation:
CREATE AGGREGATE join (
BASETYPE = INT,
SFUNC = array_append,
STYPE = INT[],
INITCOND = '{}'
);
Et à l'utilisation:
SELECT id_action, join(id_fiche)
FROM transi
GROUP BY id_action;
L'avantage de cette méthode, c'est qu(il te retourne un tableau, donc si derrière ton front-end sait les gérer, c'est parfait. (sinon, tu auras un texte avec les valeurs entre virgules...)
Enfin, si tu est un peu plus joueur, car après tout les nombres sont bon pour l'ordinateur, mais toi ce sont les données qui t'interessent, tu peux faire ceci:
Préparation:
CREATE PROCEDURAL LANGUAGE plpgsql;
CREATE FUNCTION join_text_merge(TEXT[]) RETURNS TEXT
LANGUAGE 'plpgsql' AS '
BEGIN
RETURN array_to_string(1,ドル \', \');
END;
';
CREATE AGGREGATE join (
BASETYPE = TEXT,
SFUNC = array_append,
STYPE = TEXT[],
FINALFUNC = join_text_merge,
INITCOND = '{}'
);
Et tu peux ensuite faire de requetes plus intelligentes:
SELECT actions.nom AS action,
join(fiches.nom) AS fiches
FROM transi, actions, fiches
WHERE transi.id_action = actions.id_action
AND transi.id_fiche = fiches.id_fiche
GROUP BY action;
Note: bonus, les deux fonctions join peuvent vivrent ensemble.