Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

bảng dịch mysql có ngôn ngữ dự phòng bị thiếu

được, vì vậy truy vấn sau có thể được thực hiện mà không cần truy vấn con mà thay vào đó là một phép nối. Tôi tin tưởng trình tối ưu hóa truy vấn làm được điều này, nhưng tôi không chắc lắm.

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

Trong phiên bản này, language_id 1 được sử dụng làm dự phòng ưu tiên, bạn có thể thêm nhiều ngôn ngữ khác theo cách tương tự. Sử dụng FIND_IN_SET thay vào đó, tiêu chí thứ tự thứ hai cũng sẽ hoạt động (FIND_IN_SET(cl.language_id,'1,2,3') DESC hoặc bất kỳ thứ tự nào bạn muốn).

Tất nhiên truy vấn này ngay bây giờ là cho một country_id cố định. Nó có thể được mở rộng theo cách tương tự cho nhiều quốc gia có liên kết khác:

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

một giải pháp thay thế cho các truy vấn con sẽ là tham gia country_languages ​​hai lần và chỉ cần chọn một truy vấn đầu tiên không rỗng (có thể là một trong những giải pháp rõ ràng hơn):

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)

Nếu id ngôn ngữ 1 là ngôn ngữ dự phòng của bạn. Điều này cũng có thể được mở rộng để cung cấp nhiều ngôn ngữ dự phòng ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn của một người bạn trong PHP / MySQL?

  2. Đánh dấu câu truy vấn tìm kiếm không nhạy cảm trong MySQL

  3. Truy xuất id được chèn lần cuối bằng Mysql

  4. Bỏ qua dấu nháy đơn trong tìm kiếm mysql

  5. Làm thế nào để ghi vào cơ sở dữ liệu nhiều tác giả trong bảng sách đơn giản?