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

Eléphant du PHP | 65 Messages

11 déc. 2021, 20:54

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>

Eléphant du PHP | 337 Messages

12 déc. 2021, 00:35

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é.

Eléphant du PHP | 65 Messages

13 déc. 2021, 14:48

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 :)