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
Lepaskan: 2024-10-28 05:28:30
asal
630 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!