sql >> Database teknologi >  >> RDS >> Mysql

mysql-oversættelsestabeller med manglende sprogtilbagegang

okay, så den følgende forespørgsel kan sandsynligvis udføres uden en underforespørgsel, men med en join i stedet. Jeg ville stole på, at forespørgselsoptimeringsværktøjet gør dette, men jeg ville ikke være for sikker.

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

I denne version bruges language_id 1 som den foretrukne fallback, du kan sandsynligvis tilføje flere sprog på lignende måde. Bruger FIND_IN_SET i stedet ville et kriterium af anden orden også fungere (FIND_IN_SET(cl.language_id,'1,2,3') DESC eller hvilken som helst rækkefølge du foretrækker).

Selvfølgelig er denne forespørgsel lige nu for et fast country_id. Det kunne udvides på lignende måde for flere lande med et andet medlem:

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

et alternativ til underforespørgsler ville være at slutte sig til country_languages ​​to gange, og bare vælge den første, der ikke er null (hvilket sandsynligvis er en af ​​de renere løsninger):

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)

Hvis sprog-id 1 er dit reservesprog. Dette kan også udvides til at give flere reservesprog ...



  1. Sideinddeling i SQL Server ved hjælp af OFFSET/FETCH

  2. Hvorfor mysql begivenhedsplan ikke virker i databasen localhost?

  3. viser link i php

  4. 3 måder at returnere en streng af flere mellemrum i SQL Server