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...
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...
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...
Merci !
Stéphane Santon
Bonjour,
J'ai pas mal ramé, mais à force d'essais pas à pas...
Voici ma table : id_option; objet; id_objet; id_typeoption; active
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 ??
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 ??
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....
Merci
Le 15/06/2012 21:51, Stéphane Santon a écrit :
Bonjour,
J'ai pas mal ramé, mais à force d'essais pas à pas...
Voici ma table :
id_option; objet; id_objet; id_typeoption; active
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 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....
Merci
Stéphane Santon
pif34 a écrit :
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 !
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 !
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 !