Requete pour le multilangue

CvNeo
Invité n'ayant pas de compte PHPfrance

14 juil. 2016, 23:12

Bonjour,

Je gère des données en multilingue.
Pour exemple, stocké en DB :
IDLigne | IDProduit | IDLangue | Description ...
1 | 1 | FR | test produit 1 - FR
2 | 1 | DE | test produit 1 - DE
3 | 2 | FR | test produit 2 - FR
4| 2 | FR | test produit 2 - DE
5| 2 | EN | test produit 2 - EN

Lors de la sélection d'un produit :
SELECT * FROM produit WHERE IDProduit = 1 AND IDLangue = EN

Seulement comme tout n'est pas traduit comme pour l'exemple le EN du produit 1 n'est pas encore traduit, je voudrais donc dans ce cas prendre la langue par défaut à la place, je cherche à faire quelque chose du genre :
SELECT * FROM produit WHERE IDProduit = 1 AND IDLangue = EN si pas dispo prendre FR par defaut

Une idée ?
Merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 juil. 2016, 14:00

salut,

avec ta requête le plus simple c'est d'utiliser la clause IN
SELECT * FROM produit WHERE IDProduit = 1 AND IDLangue in('EN','le choix utilisateur')
du coup tu auras au moins une ligne si tu sais que la description est toujours au moins en anglais.

Il existe d'autre façon de faire cela :
- Une fonction SQL (UDF) qui recherche la traduction pour la langue passée en paramètre (ainsi que l'id produit) et si elle n'existe pas retourne la version anglaise.
- Dans la requête de sélection des produits plutôt que de faire une jointure sur la table des descriptsion tu ajoutes deux subselect dans la liste des colonnes pour récupérer la description dans la langue utilisateur et en anglais (comme ça à l'affichage si description vide on prendre defaultDescription).

a mon avis la meilleur solution c'est l'UDF.

@+
Il en faut peu pour être heureux ......