From: | georges(dot)simon(at)sermeta(dot)com |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Une recherche sur plusieurs lignes ? |
Date: | 2009-08-19 12:00:34 |
Message-ID: | OFD679DD27.08125BD4-ONC1257617.0040ADA3-C1257617.0041F854@sermeta.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
Une solution possible :
-- Création des tables et des liens
CREATE TABLE context_keys
(
ck_id serial NOT NULL,
ck_name text NOT NULL,
CONSTRAINT ck_pk PRIMARY KEY (ck_id)
)
CREATE TABLE context_list
(
cl_id serial NOT NULL,
CONSTRAINT cl_pk_id PRIMARY KEY (cl_id)
)
CREATE TABLE context_values
(
cv_cl_id integer NOT NULL,
cv_ck_id integer NOT NULL,
cv_value text NOT NULL,
CONSTRAINT cv_pk PRIMARY KEY (cv_cl_id, cv_ck_id),
CONSTRAINT ck_id FOREIGN KEY (cv_ck_id)
REFERENCES context_keys (ck_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT cl_id FOREIGN KEY (cv_cl_id)
REFERENCES context_list (cl_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
-- création d'une vue pour l'exploitation
CREATE OR REPLACE VIEW vue_global AS
SELECT context_values.cv_cl_id AS context,
context_values.cv_ck_id AS key,
context_keys.ck_name AS name,
context_values.cv_value AS value
FROM context_values
JOIN context_keys ON context_keys.ck_id = context_values.cv_ck_id;
-- création d'une fonction renvoyant le context d'un couple
CREATE OR REPLACE FUNCTION get_context(n text, v text) RETURNS integer AS
$BODY$
BEGIN
RETURN (SELECT context FROM vue_global WHERE name = n AND value = v);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE STRICT
-- exemple de requete répondant à la question de base (cad connaitre un
"context" pour une liste connue de couple)
select distinct context
from vue_global
where context = get_context('label1', 'value3')
and context = get_context('label2', 'value4')
A voir ...
Georges SIMON
From | Date | Subject | |
---|---|---|---|
Next Message | Daniel Verite | 2009-08-19 12:14:43 | Re: Une recherche sur plusieurs lignes ? |
Previous Message | Samuel ROZE | 2009-08-19 10:28:17 | Re: Une recherche sur plusieurs lignes ? |