Re: Une recherche sur plusieurs lignes ?

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

In response to

Responses

Browse pgsql-fr-generale by date

  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 ?