OVH Cloud OVH Cloud

Optimisation d'une requête ?

2 réponses
Avatar
[Bruno]
Bonjour à tous,

Dans le cadre d'un requête dans catalogue produit je fais quelque chose
comme ça :



SELECT *, 1 AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix > 0)

UNION ALL

SELECT *, 2 AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix = 0)

ORDER BY tri


Est il possible de déclarer ma variable "tri" dynamiquement dans une
seul requête ?

Ex : Si produit_prix = 0, alors tri =2, sinon tri = 1

2 réponses

Avatar
Gilles
J'aurais fais du style
SELECT *, CASE WHEN produit_prix > 0 THEN 1 ELSE 2 END AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix >= 0)


"[Bruno]" a écrit dans le message de news:
4267b29c$0$1218$
Bonjour à tous,

Dans le cadre d'un requête dans catalogue produit je fais quelque chose
comme ça :



SELECT *, 1 AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix > 0)

UNION ALL

SELECT *, 2 AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix = 0)

ORDER BY tri


Est il possible de déclarer ma variable "tri" dynamiquement dans une seul
requête ?

Ex : Si produit_prix = 0, alors tri =2, sinon tri = 1


Avatar
Synopsis
Oui, en utilisant la fonction case

SELECT
Tri case
when produit_prix > 0 then 1
else 2
end
, *
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
ORDER BY 1

"[Bruno]" a écrit dans le message de news:
4267b29c$0$1218$
Bonjour à tous,

Dans le cadre d'un requête dans catalogue produit je fais quelque chose
comme ça :



SELECT *, 1 AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix > 0)

UNION ALL

SELECT *, 2 AS tri
FROM table_produit
WHERE (produit_actif = 1) AND (ref_catalogue_produit = 123) AND
(produit_prix = 0)

ORDER BY tri


Est il possible de déclarer ma variable "tri" dynamiquement dans une seul
requête ?

Ex : Si produit_prix = 0, alors tri =2, sinon tri = 1