Page 1 sur 1

Comment faire une requete sql avec un CASE ou IF, HELP!!!!

Posté : 11 déc. 2021, 20:54
par max303
Bonjour, quelqu'un peut m'aider à mettre une condition pour les langues dans ma requête, merci :)
Voici mon code:

Code : Tout sélectionner

function getSouscategories(){ global $bdd; $sql="SELECT C.id , case $_SESSION['lang'] when 'FR' then C.nom_FR when 'EN' then C.nom_EN when 'ES' then C.nom_ES end as C.nom , case $_SESSION['lang'] when 'FR' then DESC_C.nom_FR when 'EN' then DESC_C.nom_EN when 'ES' then DESC_C.nom_ES end as DESC_C.nom FROM categories C "; try{ $req = $bdd->prepare($sql); $req->execute(); $res = $req->fetchAll(PDO::FETCH_ASSOC); }catch(Exception $e){ echo "Erreur dans la requête " . $sql; $res = false; } return $res; }
Le but est que $C.nom soit égale à toutes les autres en terme de langues selon celle choisie depuis le début :

Code : Tout sélectionner

$categories=getSouscategories(); <select name="categorie"> <?php foreach($categories as $C){ echo "<option value='".$C['id']."'>".$C['nom']."</option>"; } ?> </select>

Re: Comment faire une requete sql avec un CASE ou IF, HELP!!!!

Posté : 12 déc. 2021, 00:35
par finipe
Ce serait plus simple de construire ta requête en php, en concaténant les conditions nécessaires, plutôt que de faire la requête entière en sql. D'autant que dans ce cas, la variable $_SESSION['lang'] contient exactement la chaîne de caractère variable qui permet de faire la sélection.

Un truc comme ça :

Code : Tout sélectionner

$sql = "SELECT C.id,"; $sql .= "C.nom_".$_SESSION['lang']; $sql .= " as C.nom,"; $sql .= " DESC_C.nom_".$_SESSION['lang']; $sql .= " as DESC_C.nom";
Après y a plus qu'à interroger la base avec cette requête, et le tour est joué.

Re: Comment faire une requete sql avec un CASE ou IF, HELP!!!!

Posté : 13 déc. 2021, 14:48
par max303
Ce serait plus simple de construire ta requête en php, en concaténant les conditions nécessaires, plutôt que de faire la requête entière en sql. D'autant que dans ce cas, la variable $_SESSION['lang'] contient exactement la chaîne de caractère variable qui permet de faire la sélection.

Un truc comme ça :

Code : Tout sélectionner

$sql = "SELECT C.id,"; $sql .= "C.nom_".$_SESSION['lang']; $sql .= " as C.nom,"; $sql .= " DESC_C.nom_".$_SESSION['lang']; $sql .= " as DESC_C.nom";
Après y a plus qu'à interroger la base avec cette requête, et le tour est joué.
Je n'avais pas pensé à la concaténation. Une très bonne idée, merci finipe :)