AIDE MySQL : unique liste selon 2 requetes (jointure)

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
TopJB
Le #23471191
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

Stéphane Santon
Le #23473641
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
Sebastien Lardiere
Le #23473791
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
Sebastien Lardiere
Le #23473781
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
Alain Montfranc
Le #23473771
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
Stéphane Santon
Le #23474061
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
Stéphane Santon
Le #23474051
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
Stéphane Santon
Le #23474081
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
Publicité
Poster une réponse
Anonyme