Une option peut avoir les valeurs 'non', 'oui', ou 'rubrique' qui signifie qu'elle h rite de l' tat de l'option affect e sa rubrique (on prendra 5 ici par exemple), que l'on retrouve dans la m me table :
- dans l'enregistrement (objet = 'rubrique', id_objet = sa_rubrique)
ou d faut
- dans l'enregistrement (objet = 'rubrique', id_objet = 0)
Je cherche la requ tre SQL correspondante qui permet d'extraire les options dont active est 'oui', ou, 'rubrique' et que le active de rubrique est 'oui' (h ritage)...
Dans le genre...
SELECT o.id_option, o.active, h.active
FROM options AS o
JOIN options as h
ON
(o.active = 'oui') OR
( (o.active = 'rubrique') AND (h.objet = 'rubrique) AND (h.active = 'oui') )
Merci !
-- St phane
Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org Agitateurs d'id es... acc l rateurs de talents !
> Une option peut avoir les valeurs 'non', 'oui', ou 'rubrique' qui
> signifie qu'elle h rite de l' tat de l'option affect e sa rubrique (on
> prendra 5 ici par exemple), que l'on retrouve dans la m me table :
> - dans l'enregistrement (objet = 'rubrique', id_objet = sa_rubrique)
> ou d faut
> - dans l'enregistrement (objet = 'rubrique', id_objet = 0)
> Je cherche la requ tre SQL correspondante qui permet d'extraire les
> options dont active est 'oui', ou, 'rubrique' et que le active de
> rubrique est 'oui' (h ritage)...
> Dans le genre...
> SELECT o.id_option, o.active, h.active
> FROM options AS o
> JOIN options as h
> ON
> (o.active = 'oui') OR
> ( (o.active = 'rubrique') AND (h.objet = 'rubrique) AND (h.active =
> 'oui') )
pour ce que j'ai compris, ta requ te est pas male, il manque peut tre une jointure ouverte correctement crite:
from .....
left outer join .... on o.x = h.y
where (o.active = 'oui') or (..... )
sinon, tu peux faire la meme chose avec un 'in' et une sous requ te, mais en g n ral c'est plus couteux en terme de perfs...
Je cherche un id_option pour lequel :
- objet est défini, et
- id_objet est défini, et
- id_typeoption est défini, et
- active vaut 'oui'
OU
- (active vaut 'rubrique'
ET il existe un enregistrement "d'héritage" pour lequel
objet vaut 'rubrique' et
id_objet vaut 0 et
active vaut 'oui'
J'ai un résultat correct avec :
SELECT
o.id_option,
o.objet, o.id_objet, o.active,
h.objet, h.id_objet, h.active
FROM
mobidev_options AS o
LEFT OUTER JOIN
mobidev_options AS h
ON (h.objet = o.active) AND (h.id_objet = 0) and (h.id_typeoption = 3)
WHERE (o.objet = 'etablissement') AND (o.id_objet = 106) and (o.id_typeoption = 3)
Est-ce correct, est-ce optimisable en perfs ??
Merci
-- Stéphane
Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org Agitateurs d'idées... accélérateurs de talents !
> Je cherche un id_option pour lequel :
> - objet est défini, et
> - id_objet est défini, et
> - id_typeoption est défini, et
> - active vaut 'oui'
> OU
> - (active vaut 'rubrique'
> ET il existe un enregistrement "d'héritage" pour lequel
> objet vaut 'rubrique' et
> id_objet vaut 0 et
> active vaut 'oui'
> J'ai un résultat correct avec :
> SELECT
> o.id_option,
> o.objet, o.id_objet, o.active,
> h.objet, h.id_objet, h.active
> FROM
> mobidev_options AS o
> LEFT OUTER JOIN
> mobidev_options AS h
> ON (h.objet = o.active) AND (h.id_objet = 0) and (h.id_typeoption = 3)
> WHERE (o.objet = 'etablissement') AND (o.id_objet = 106) and
> (o.id_typeoption = 3)
> Est-ce correct, est-ce optimisable en perfs ??
je captue pas pourquoi y'a des valeurs en dur genre id_type_option = 3 ?
ta jointure devrait plutot etre du genre:
t1 left outer join t2 on t1.id_de_ma_fk = t2.id_de_ma_pk and t2.objet = 'rubrique' and t2.active = 'oui' ...
ta requête reflete pas ton contenu..
par ailleurs, si tu veux un coup de main, faut qu'à un moment donné on comprenne le schéma: quelle est l'autojointure, quelles sont les PK et les FK....
> je captue pas pourquoi y'a des valeurs en dur genre id_type_option = 3 ?
> ta jointure devrait plutot etre du genre:
> t1 left outer join t2 on t1.id_de_ma_fk = t2.id_de_ma_pk and t2.objet = > 'rubrique' and t2.active = 'oui' ...
> ta requête reflete pas ton contenu..
> par ailleurs, si tu veux un coup de main, faut qu'à un moment donné on > comprenne le schéma: quelle est l'autojointure, quelles sont les PK et les > FK....
Parce que les valeurs en dur ne sont pas le coeur du problème à mon avis, j'ai donc simplifié par une constante.
PK / FK je ne comprends pas....
Voici l'essence :
J'ai des objets de type rubrique, articles, etabliss, ... chacun identifié par un id_objet.
Pour un objet identifié donné (ici objet = 'etabliss', et id_objet = 106), je cherche à savoir s'il existe une option identifiée attachée dans la table options décrite.
L'option peut être directe : active = 'oui' ou 'non'
ou indirecte, héritée du type d'objet : active = 'rubrique'.
Si l'option est héritée, je veux récupérer la vraie valeur de l'option dans la table.
Exemples :
Pour l'établissement 106, le typeoption 6 est active, on le sait directement par l'id_option récupéré /12/
Pour l'établissement 106, le typeoption /3/ est définie par l'option des rubriques, on le sait par l'id_option récupéré /11/.
Il faut alors joindre l'enregistrement de la même table pour lequel objet = 'rubrique' et id_typeoption = 3 (et id_objet = 0).
On trouve alors 'oui' par l'id_option '6'
On récupère alors un unique enregistrement :
id_option objet id_objet active objet id_objet active
11 etablissement 106 rubrique rubrique 0 oui
-- Stéphane
Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org Agitateurs d'idées... accélérateurs de talents !