Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah saya boleh memilih berbilang lajur dengan cekap daripada jadual atribut dan terjemahan dalam MySQL, dengan mengambil kira pelbagai terjemahan dan potensi jurang bahasa?

Bagaimanakah saya boleh memilih berbilang lajur dengan cekap daripada jadual atribut dan terjemahan dalam MySQL, dengan mengambil kira pelbagai terjemahan dan potensi jurang bahasa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 05:28:30631semak imbas

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

Memilih Berbilang Lajur dalam Subkueri MySQL

Soalan:

Dalam pangkalan data MySQL, bagaimana seseorang boleh memilih berbilang lajur dengan cekap daripada jadual atribut dan terjemahan, memandangkan berbilang terjemahan wujud untuk setiap atribut dan terjemahan mungkin tidak tersedia untuk semua bahasa dalam semua kes?

Jawapan:

Pendekatan yang disyorkan adalah untuk menggunakan subkueri untuk mendapatkan berbilang lajur dalam satu pertanyaan. Kuncinya ialah memahami bahawa subkueri boleh berfungsi sebagai jadual maya dengan melampirkan pernyataan pilihan dalam kurungan.

Pertimbangkan pertanyaan berikut:

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

Dalam pertanyaan ini, pernyataan SELECT dalam kurungan mencipta jadual maya b yang mengandungi lajur yang dikehendaki untuk maklumat terjemahan. Jadual maya ini kemudiannya dicantumkan ke jadual atribut sebenar a, memanfaatkan klausa HIDUP untuk memadankan atribut dan menapis mengikut bahasa.

Dengan menggunakan subkueri dengan cara ini, anda boleh memilih berbilang lajur dengan berkesan daripada satu jadual, memastikan bahawa semua atribut dikembalikan, walaupun tanpa terjemahan dalam bahasa yang ditentukan.

Kaedah Alternatif:

Sebagai alternatif, anda boleh melakukan subkueri berasingan untuk setiap lajur:

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

Walau bagaimanapun, pendekatan ini secara amnya kurang cekap kerana memerlukan berbilang subkueri.

Menyertakan tiga jadual (atribut, bahasa atribut dan terjemahan) mungkin kelihatan sebagai penyelesaian yang berdaya maju, tetapi secara umumnya ia menghasilkan dalam prestasi yang lebih teruk berbanding menggunakan subkueri.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memilih berbilang lajur dengan cekap daripada jadual atribut dan terjemahan dalam MySQL, dengan mengambil kira pelbagai terjemahan dan potensi jurang bahasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn