Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

tabel terjemahan mysql dengan fallback bahasa yang hilang

oke, jadi kueri berikut mungkin bisa dilakukan tanpa subkueri tetapi dengan bergabung. Saya percaya pengoptimal kueri melakukan ini, tetapi saya tidak terlalu yakin.

SELECT l.name as language,
       (SELECT cl.name 
        FROM country_languages cl 
        WHERE cl.country_id=[the wanted country id]
        ORDER BY cl.language_id=l.id DESC,
                 cl.language_id=1 DESC
        LIMIT 1) as country_name
FROM languages l

Dalam versi ini language_id 1 digunakan sebagai pilihan mundur, Anda mungkin dapat menambahkan lebih banyak bahasa dengan cara yang sama. Menggunakan FIND_IN_SET sebagai gantinya kriteria urutan kedua juga akan berfungsi (FIND_IN_SET(cl.language_id,'1,2,3') DESC atau pesanan apa pun yang Anda inginkan).

Tentu saja kueri ini sekarang adalah untuk country_id tetap. Itu bisa diperpanjang dengan cara yang sama untuk beberapa negara dengan bergabung lain:

SELECT l.name as language,
       (SELECT cl.name 
        FROM country_languages cl 
        WHERE cl.country_id=c.id 
        ORDER BY cl.language_id=l.id DESC,
                 cl.language_id=1 DESC
        LIMIT 1) as country_name
FROM countries c
JOIN languages l

alternatif untuk subkueri adalah bergabung dengan country_languages ​​dua kali, dan cukup pilih yang pertama bukan null (yang mungkin merupakan salah satu solusi yang lebih bersih):

SELECT l.name as language, 
       COALESCE(first.name, second.name) as country_name
FROM countries c
JOIN languages l
LEFT JOIN country_languages first ON 
        (first.country_id=c.id AND first.language_id=l.id)
LEFT JOIN country_languages second ON
        (second.country_id=c.id AND second.language_id=1)

Jika bahasa id 1 adalah bahasa cadangan Anda. Ini dapat diperluas juga untuk menyediakan beberapa bahasa cadangan ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk meneruskan variabel ke panggilan prosedur tersimpan di mysql?

  2. Saya mendapatkan hasil ganda dari kueri mysql saat menggunakan karakter internasional, yaitu /Ä=A &=O,

  3. Alat untuk mengimpor file CSV ke database MySQL?

  4. Bagaimana cara menghapus karakter buruk yang tidak cocok untuk pengkodean utf8 di MySQL?

  5. phpMyBackupPro – Alat Pencadangan MySQL Berbasis Web untuk Linux