Question :
Dans une base de données MySQL, comment sélectionner efficacement plusieurs colonnes à partir des tables d'attributs et de traduction, étant donné que plusieurs traductions existent pour chaque attribut et que les traductions peuvent ne pas être disponibles pour toutes les langues dans tous les cas ?
Réponse :
L'approche recommandée consiste à utiliser des sous-requêtes pour récupérer plusieurs colonnes en une seule requête. La clé est de comprendre que les sous-requêtes peuvent servir de tables virtuelles en plaçant une instruction select entre parenthèses.
Considérez la requête suivante :
<code class="sql">SELECT a.attr, b.id, b.trans, b.lang FROM attribute a JOIN ( SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute FROM attributeTranslation at ) b ON (a.id = b.attribute AND b.lang = 1)</code>
Dans cette requête, l'instruction SELECT entre parenthèses crée une table virtuelle b qui contient les colonnes souhaitées pour les informations de traduction. Cette table virtuelle est ensuite jointe à la table attributaire réelle a, en tirant parti de la clause ON pour faire correspondre les attributs et filtrer par langue.
En utilisant des sous-requêtes de cette manière, vous pouvez sélectionner efficacement plusieurs colonnes d'une seule table, garantissant ainsi que tous les attributs sont renvoyés, même ceux sans traduction dans la langue spécifiée.
Méthodes alternatives :
Vous pouvez également effectuer des sous-requêtes distinctes pour chaque colonne :
<code class="sql">SELECT a.attr, (select id from attributeTranslation where attribute=a.id and language=1), (select translation from attributeTranslation where attribute=a.id and language=1), from attribute a;</code>
Cependant, cette approche est généralement moins efficace car elle nécessite plusieurs sous-requêtes.
Joindre trois tables (attribut, langue d'attribut et traduction) peut sembler être une solution viable, mais elle aboutit généralement avec des performances moins bonnes par rapport à l'utilisation de sous-requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!