通过特定内容的存在来订购结果

时间:2013-12-01 19:19:46

标签: mysql sql-order-by

我有一个mysql表,其中包含带有ID,语言和文本的条目。总有一个ID语言对,但可以有更多ID,所以请遵循:

id | language | translation
---+----------+------------
 0 |       en |      Submit
 0 |       cs |     Odeslat
 0 |       fr |    Démarrer
 1 |       fr |        Jour
 1 |       en |        Day
 2 |       fr |       Lundi
 2 |       cs |     Pondělí

我不会按translation选择id并按以下方式对结果进行排序:

  1. language =用户定义的语言
  2. language ='en'
  3. 因此,如果有一行用户语言,它将首先返回(并且只有一行,因为我使用LIMIT)。如果没有,将返回英文行,如果存在的话。否则没关系。

    这是我尝试过的:

    SELECT translation FROM `entries` WHERE id=1 ORDER BY language='cs' DESC, language='en' DESC LIMIT 1
    

    我在排序中使用了DESC,因为我假设language='cs'为所需的行返回1,为不需要的行返回0。

1 个答案:

答案 0 :(得分:0)

尝试CASE表达式

SELECT *
FROM `entries` 
WHERE id = 1
ORDER BY 
  CASE WHEN language='cs' THEN 1 
       WHEN language='en' THEN 2
       ELSE 3 
  END