首頁  >  文章  >  資料庫  >  考慮到多種翻譯和潛在的語言差距,如何有效地從 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>

但是,這種方法通常效率較低,因為它需要多個子查詢。

連接三個表(屬性、屬性語言和翻譯)可能看起來是一個可行的解決方案,但通常會產生結果與使用子查詢相比,效能較差。

以上是考慮到多種翻譯和潛在的語言差距,如何有效地從 MySQL 中的屬性和翻譯表中選擇多個欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn