Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

AIDE MySQL : unique liste selon 2 requetes (jointure)

8 réponses
Avatar
Stéphane Santon
Bonjour,

Utilisant habituellement un CMS avec une syntaxe hors SQL, j'utilise
maintenant une procedure stockée qui entraine l'écriture de requêtes à
la mano.

J'ai une procedure stockée de calcul sur des champs qui peuvent être
NULL. Si je la lance, je reçois d'abord les enregistrements avec calcul
NULL, puis les enregistrements avec résultats de calcul triés par ordre
croissant.

exemple :
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles

J'aimerais avoir d'abord les enregistrements triés, puis les NULL.
Est-ce possible ?


Si non, peut-on le faire par une (auto-?) jointure ou autre ?

Merci

--
Stéphane

Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org
Agitateurs d'idées... accélérateurs de talents !

BTS Electrotechnique *** http://enselec.santonum.eu

8 réponses

Avatar
TopJB
Bonjour,

Essaye un truc du genre :

SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE
cout IS NOT NULL ORDERBY Cout
JOIN
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE
Cout IS NULL

A voir pas sûr du résultat. Mais j'essayerais un truc dans le genre.
La première te sort ceux qui sont pas NULL et tu les classent par ordre
croissant de valeur. Puis la second te prend les NULL à la suite
normalement.

Cordialement

TopJB

Le 17/06/2011 08:08, Stéphane Santon a écrit :
Bonjour,

Utilisant habituellement un CMS avec une syntaxe hors SQL, j'utilise
maintenant une procedure stockée qui entraine l'écriture de requêtes à
la mano.

J'ai une procedure stockée de calcul sur des champs qui peuvent être
NULL. Si je la lance, je reçois d'abord les enregistrements avec calcul
NULL, puis les enregistrements avec résultats de calcul triés par ordre
croissant.

exemple :
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles

J'aimerais avoir d'abord les enregistrements triés, puis les NULL.
Est-ce possible ?


Si non, peut-on le faire par une (auto-?) jointure ou autre ?

Merci

Avatar
Stéphane Santon
Bonjour,

Marche pas, MySQL n'aime pas le JOIN ici...

TopJB a écrit :
Essaye un truc du genre :

SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE cout
IS NOT NULL ORDERBY Cout
JOIN
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE Cout
IS NULL

A voir pas sûr du résultat. Mais j'essayerais un truc dans le genre.
La première te sort ceux qui sont pas NULL et tu les classent par ordre
croissant de valeur. Puis la second te prend les NULL à la suite normalement.

Cordialement

TopJB

Le 17/06/2011 08:08, Stéphane Santon a écrit :
J'ai une procedure stockée de calcul sur des champs qui peuvent être
NULL. Si je la lance, je reçois d'abord les enregistrements avec calcul
NULL, puis les enregistrements avec résultats de calcul triés par ordre
croissant.

exemple :
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles

J'aimerais avoir d'abord les enregistrements triés, puis les NULL.
Est-ce possible ?

Si non, peut-on le faire par une (auto-?) jointure ou autre ?





--
Stéphane

Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org
Agitateurs d'idées... accélérateurs de talents !

BTS Electrotechnique *** http://enselec.santonum.eu
Avatar
Sebastien Lardiere
On 06/17/2011 08:08 AM, Stéphane Santon wrote:
Bonjour,

Utilisant habituellement un CMS avec une syntaxe hors SQL, j'utilise
maintenant une procedure stockée qui entraine l'écriture de requêtes à
la mano.

J'ai une procedure stockée de calcul sur des champs qui peuvent être
NULL. Si je la lance, je reçois d'abord les enregistrements avec calcul
NULL, puis les enregistrements avec résultats de calcul triés par ordre
croissant.

exemple :
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles

J'aimerais avoir d'abord les enregistrements triés, puis les NULL.
Est-ce possible ?





Bonjour,

normalement, on devrait pouvoir écrire ça :

SELECT id_article, titre, calcul( prix, qte) as cout FROM articles ORDER
BY prix, qte NULL LAST

Mais ça ne fonctionne pas dans MySQL. Je suggère ça :

SELECT id_article, titre, calcul( prix, qte) as cout FROM articles ORDER
BY coalesce(prix, 9999999999) , coalesce(qte, 999999999 )

à adapter, en fct des valeurs possibles des champs.

--
Sébastien
Avatar
Sebastien Lardiere
On 06/17/2011 09:31 AM, TopJB wrote:

SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE
cout IS NOT NULL ORDERBY Cout
JOIN
SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE
Cout IS NULL




un ORDER BY a cet endroit ? surprenant !

--
Sébastien
Avatar
Alain Montfranc
Stéphane Santon avait quoté à l'envers mais bon c est pas grave :
Bonjour,

Marche pas, MySQL n'aime pas le JOIN ici...



UNION pas JOIN
Avatar
Stéphane Santon
Bonjour,

Merci pour vos propositions. Ce sera alors :

(SELECT id_article, titre, calcul( prix, qte) as cout FROM articles
WHERE prix IS NOT NULL)
UNION
(SELECT id_article, titre, 999999 as cout FROM articles WHERE prix IS
NULL)
ORDER BY cout


Alain Montfranc a écrit :
UNION pas JOIN



--
Stéphane

Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org
Agitateurs d'idées... accélérateurs de talents !

BTS Electrotechnique *** http://enselec.santonum.eu
Avatar
Stéphane Santon
Stéphane Santon a écrit :
(SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE
prix IS NOT NULL)
UNION
(SELECT id_article, titre, 999999 as cout FROM articles WHERE prix IS NULL)
ORDER BY cout



Car quand je mets le ORDER BY dans le premier SELECT, et aucun ORDER BY
après, la première partie de liste n'est pas triée :-/

--
Stéphane

Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org
Agitateurs d'idées... accélérateurs de talents !

BTS Electrotechnique *** http://enselec.santonum.eu
Avatar
Stéphane Santon
Mieux ! :-)

(SELECT
id_article, titre,
calcul( prix, qte) as cout,
0 as vide
FROM articles
WHERE prix IS NOT NULL)
UNION
(SELECT
id_article, titre,
NULL as cout,
1 as vide
FROM articles
WHERE prix IS NULL)
ORDER BY vide, cout


Stéphane Santon a écrit :
(SELECT id_article, titre, calcul( prix, qte) as cout FROM articles WHERE
prix IS NOT NULL)
UNION
(SELECT id_article, titre, 999999 as cout FROM articles WHERE prix IS NULL)
ORDER BY cout



--
Stéphane

Jeune Chambre Economique de Saintes *** http://www.jce-saintes.org
Agitateurs d'idées... accélérateurs de talents !

BTS Electrotechnique *** http://enselec.santonum.eu