8791 sujets

Développement web côté serveur, CMS

Salut à tous.

Je voudrais transformer le code suivant :


<?php
      $requette = "SELECT `champ1`,`champ2` FROM `table` WHERE id='1'";
      $launch = mysql_query($requette);
      $val = mysql_fetch_assoc($launch);
      if($val["champ1"] > $val["champ2]){
           $valeur = $val["champ1"];
      }else{
           $valeur = $val["champ2"];
      }
?>


sous forme SQL pure. J'ai deux champs côte à côte sur une ligne d'une table. Et je ne dois sortir que le plus grand des deux. Je ne peux que requetter la table en SQL et rien d'autre.

Ca pourrait ressembler à ca


SELECT `champ1`,`champ2` FROM `table` WHERE numero=1 CASE WHEN `champ1`>`champ2` THEN `champ1` AS `test` ELSE `champ1`<`champ2` THEN `champ2` AS test


Si quelqu'un à une idée, je suis preneur

Rude

PS : je précise au cas ou mais il s'agit de champs numérique.
Modifié par ffwrude (05 Feb 2010 - 15:05)
Salut,

c'est un cas typique d'erreur de modélisation car si tu compares les 2 champs c'est qu'ils symbolisent la même notion et donc qu'ils devraient se trouver dans une autre table avec une jointure (clef étrangère).

Pour être plus précis tu as par exemple :
voitures :
id_voiture
couleur_voiture
trajet1
trajet2

alors qu'il faudrait
voitures :
id_voiture
couleur_voiture

trajets :
id_trajet
id_voiture
kilometrage

Du coup ça oblige à faire une requête "moche" pour répondre à ta question. Par exemple :
Select champ1 as valeur FROM matable Where champ1 - champ2 >= 0 and id = 1
Union Select champ2 as valeur FROM matable Where champ2 - champ1 >= 0 and id = 1


Edit: Bon c'est vrai que j'ai pris la plus moche possible ! Smiley langue

On peut aussi faire :
Select Case When champ1 >= champ2 Then champ1 Else champ2 End As Valeur From matable Where id=1

Modifié par Heyoan (05 Feb 2010 - 15:00)
Yo Heyoan Smiley smile Faisait longtemps Smiley cligne

En fait en regardant les CASE je suis tombé sur un fonctionement de IF en SQL que je connaissais pas.

Je me suis débrouiller avec ca :


SELECT IF(`champ1`>`champ2`, `champ1`, `champ2`) AS `REPONSE` FROM `table` WHERE numero=1


Donc => Si champ1 > champ2 il répond oui ou non => oui remplacé par champ1 et non par champ2 puis placer dans un alias.

Pour l'erreur de modélisation je suis d'accord. Mais je ne peux que faire des requettes sur une base éxistante donc j'ai pas trop le choix je dois faire avec.

Merci en tout cas Smiley smile j'ai pas pris ta réponse mais j'ai trouvé la mienne grace à toi Smiley cligne

Edit : A ceux qui passeront par la. La soluce d'Heyoan fonctionne aussi parfaitement
Modifié par ffwrude (05 Feb 2010 - 15:07)
ffwrude a écrit :
Faisait longtemps Smiley cligne
Yep ! Smiley smile

Et merci pour le SELECT IF... Je ne savais pas que ça fonctionnait avec Mysql. Smiley cligne
Modifié par Heyoan (05 Feb 2010 - 15:17)
De rien. Je connaissais pas non plus.

Puis je suis de retour un vendredÿ rien de surprenant à ca. A la prochaine

Rude