Bonjour,
En complément d'un autre post sur le même sujet :
Comportement-etrange-de-variables-MySQL
Connaitriez vous un moyen d'utiliser une variable déclaré dans un select et réutiliser dans le même select ?
j'ai lu la doc MySQL
[URL="http://http://dev.mysql.com/doc/refman/5.0/fr/variables.html"]http://http://dev.mysql.com/doc/refman/5.0/fr/variables.html[/URL]
Mais cela ne m'aide pas ...
[QUOTE]
....
mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM nom_de_table HAVING b=5;
La raison est que @aa ne contiendra pas la valeur de la ligne courante, mais celle de id pour la dernière ligne acceptée.
La règle générale est de ne jamais assigner et utiliser la même variable dans la même commande. ......[/QUOTE]
Voici ma requête :
J'aimerais pouvoir réutiliser facilement par exemple :
Pour calculer d'autre valeur (comme rajouter une remise etc ...), mais je suis obligé de reprendre toute la ligne.
Pouvoir créer une variable contenant l'information (numérique) m'aiderais bien (j'imagine que je ne suis pas le seul).
Le seul moyen que j'ai trouvé pour le moment c'est de déclarer les variables dans un genre de @maVar:=(select ...) et de la réutiliser dans une nouvelle requête, mais cela n'est pas très souple ...
Merci de votre aide
Modifié par caledonien (27 Oct 2011 - 02:38)
En complément d'un autre post sur le même sujet :
Comportement-etrange-de-variables-MySQL
Connaitriez vous un moyen d'utiliser une variable déclaré dans un select et réutiliser dans le même select ?
j'ai lu la doc MySQL
[URL="http://http://dev.mysql.com/doc/refman/5.0/fr/variables.html"]http://http://dev.mysql.com/doc/refman/5.0/fr/variables.html[/URL]
Mais cela ne m'aide pas ...
[QUOTE]
....
mysql> SELECT (@aa:=id) AS a, (@aa+3) AS b FROM nom_de_table HAVING b=5;
La raison est que @aa ne contiendra pas la valeur de la ligne courante, mais celle de id pour la dernière ligne acceptée.
La règle générale est de ne jamais assigner et utiliser la même variable dans la même commande. ......[/QUOTE]
Voici ma requête :
SELECT
(case when(a.remise_p <> '') then(select politique_commerciale_remises.remise from politique_commerciale_remises where((politique_commerciale_remises.id = a.remise_p) and(politique_commerciale_remises.id_pc = d.id_pc))) else a.remise1 end) AS pourcent_remise,
(a.prix_p * a.qte) AS prix_total_hors_remise,
(a.prix_p - ((a.prix_p * (case when(a.remise_p <> '') then(select politique_commerciale_remises.remise from politique_commerciale_remises where((politique_commerciale_remises.id = a.remise_p) and(politique_commerciale_remises.id_pc = d.id_pc))) else a.remise1 end)) / 100)) AS pu_avec_remise,
((a.prix_p - ((a.prix_p * (case when(a.remise_p <> '') then(select politique_commerciale_remises.remise from politique_commerciale_remises where((politique_commerciale_remises.id = a.remise_p) and(politique_commerciale_remises.id_pc = d.id_pc))) else a.remise1 end)) / 100)) * a.qte) AS prix_total_ligne,
a.id,
a.qte,
d.id_commercial,
a.ordre,
concat(ucfirst(h.usr_titre), _latin1' ', ucfirst(h.usr_nom), _latin1' ', ucfirst(h.usr_prenom)) AS nom_commercial,
d.id_mag,
g.libelle AS nom_mag,
d.id_societe,
f.libelle AS nom_societe,
a.commentaire_bdc_lignes,
a.id_bdc,
d.id_pc,
a.remise_p AS id_remise_pc,
a.id_emplacement,
b.libelle AS nom_emplacement,
a.id_format,
c.libelle AS nom_format,
a.remise1,
a.remise2,
e.remise AS nom_remise_pc,
a.prix_p,
a.total_ht,
a.emplacement_rigeur,
a.no_semaine,
a.annee,
a.`status`,
i.id AS id_avoir,
i.status_avoir_lignes,
a.groupe
FROM
bdc_lignes a
LEFT OUTER JOIN bdc_emplacements_listes b ON (a.id_emplacement = b.id)
LEFT OUTER JOIN bdc_formats_listes c ON (a.id_format = c.id)
LEFT OUTER JOIN bdc d ON (a.id_bdc = d.id_bdc)
LEFT OUTER JOIN politique_commerciale_remises e ON (a.remise_p = e.id)
LEFT OUTER JOIN societes f ON (d.id_societe = f.id)
LEFT OUTER JOIN liste_mag g ON (d.id_mag = g.id)
LEFT OUTER JOIN utilisateurs h ON (d.id_commercial = h.usr_id)
LEFT OUTER JOIN avoirs_lignes i ON (i.id_bdc_lignes = a.id)
J'aimerais pouvoir réutiliser facilement par exemple :
(case when(a.remise_p <> '') then(select politique_commerciale_remises.remise from politique_commerciale_remises where((politique_commerciale_remises.id = a.remise_p) and(politique_commerciale_remises.id_pc = d.id_pc))) else a.remise1 end) AS pourcent_remise
Pour calculer d'autre valeur (comme rajouter une remise etc ...), mais je suis obligé de reprendre toute la ligne.
Pouvoir créer une variable contenant l'information (numérique) m'aiderais bien (j'imagine que je ne suis pas le seul).
Le seul moyen que j'ai trouvé pour le moment c'est de déclarer les variables dans un genre de @maVar:=(select ...) et de la réutiliser dans une nouvelle requête, mais cela n'est pas très souple ...
Merci de votre aide
Modifié par caledonien (27 Oct 2011 - 02:38)