Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

Next:From: Daniel VeriteDate: 2009-08-19 12:14:43
Subject: Re: Une recherche sur plusieurs lignes ?
Previous:From: Samuel ROZEDate: 2009-08-19 10:28:17
Subject: Re: Une recherche sur plusieurs lignes ?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group