mysql - 按特定内容的存在对结果排序

标签 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í

我不想按id选择翻译并对结果进行排序:

  1. 语言 = 用户定义的语言
  2. 语言 = 'en'

这样,如果有一行包含用户语言,它将首先返回(并且只有一个,因为我使用LIMIT)。如果不存在,则将返回英文行(如果存在)。否则没关系。

这是我尝试过的:

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

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

最佳答案

尝试 CASE 表达式

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

关于mysql - 按特定内容的存在对结果排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316130/

相关文章:

mysql - 如何使用谷歌表格数据自动更新 SQl 数据库

mysql - SQL-如何查找包含时间戳的同一列的两行之间的差异

php - 为什么在使用 count(*) DESC 时结果不按顺序显示

mysql - SQL 查询需要修改 — 同一主题不能多次显示

php - 按价格和折扣价格排序

mysql - 在 SQL 中使用 min 和 DATE()

php - MySQL 与 RAND() 和 1 DESC 相关的问题?

mysql - 为什么我的带有 ORDER BY 的 MySQL SELECT 语句这么慢,即使列上有 INDEX?

sql - "ORDER BY items must appear in the select list if SELECT DISTINCT is specified"

php - mysqli代码和call_user_func_array()中出现的错误