ホームページ  >  記事  >  データベース  >  複数の翻訳と潜在的な言語ギャップを考慮して、MySQL の属性テーブルと翻訳テーブルから複数の列を効率的に選択するにはどうすればよいですか?

複数の翻訳と潜在的な言語ギャップを考慮して、MySQL の属性テーブルと翻訳テーブルから複数の列を効率的に選択するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 05:28:30631ブラウズ

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

MySQL サブクエリでの複数の列の選択

質問:

MySQL データベースで複数の列を効率的に選択するにはどうすればよいですか?属性と翻訳テーブルから、属性ごとに複数の翻訳が存在し、すべての場合にすべての言語で翻訳が利用できるわけではないことを考慮しますか?

回答:

推奨されるアプローチサブクエリを利用して、単一のクエリで複数の列を取得することです。重要なのは、select ステートメントをかっこで囲むことでサブクエリが仮想テーブルとして機能できることを理解することです。

次のクエリについて考えてみましょう。

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

このクエリでは、かっこ内の SELECT ステートメントによって、変換情報に必要な列を含む仮想テーブル b。次に、この仮想テーブルは実際の属性テーブル a に結合され、ON 句を利用して属性を照合し、言語でフィルタリングします。

この方法でサブクエリを利用することで、単一のテーブルから複数の列を効果的に選択でき、指定した言語に翻訳されていない属性も含めて、すべての属性が返されることを意味します。

代替方法:

または、列ごとに個別のサブクエリを実行することもできます:

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

ただし、このアプローチは複数のサブクエリが必要なため、一般に効率が低くなります。

3 つのテーブル (属性、属性言語、翻訳) を結合するのは実行可能な解決策のように見えるかもしれませんが、一般的には次のような結果になります。サブクエリを使用する場合と比較してパフォーマンスが低下します。

以上が複数の翻訳と潜在的な言語ギャップを考慮して、MySQL の属性テーブルと翻訳テーブルから複数の列を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。