Maison > base de données > tutoriel mysql > le corps du texte

Comment puis-je sélectionner efficacement plusieurs colonnes dans les tables d'attributs et de traduction dans MySQL, en tenant compte de plusieurs traductions et des éventuelles lacunes linguistiques ?

Mary-Kate Olsen
Libérer: 2024-10-28 05:28:30
original
630 Les gens l'ont consulté

How can I efficiently select multiple columns from attribute and translation tables in MySQL, considering multiple translations and potential language gaps?

Sélection de plusieurs colonnes dans une sous-requête MySQL

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!