mysql - 按特定值排序

标签 mysql sql

我的这个查询可能会返回多个结果。是否可以按照pending、failed、application、submitted、cancelled的顺序排序显示?

即如上所示按 pa.status 排序。

SELECT
  cl.id,cl.lead_id,cl.client_name,po.id,po.carrier,
  pa.downpayment_time,pa.status,pa.policy_id
FROM
  pdp_client_info AS cl,
  pdp_policy_info AS po,
  pdp_payment AS pa
WHERE
  cl.id = po.id AND po.id=pa.policy_id
 AND pa.downpayment_date = '$current_date'
 AND (pa.status='pending'
   OR pa.status='failed'
   OR pa.status='application'
   OR pa.status='submitted'
   OR pa.status='canceled')

最佳答案

使用FIND_IN_SET函数:

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_find-in-set

代码如下所示:

ORDER BY FIND_IN_SET(pa.status, 'pending,failed,application,submitted,canceled')

以下是我将如何重写您的 SQL 查询:

SELECT
  cl.id, cl.lead_id, cl.client_name, 
  po.id, po.carrier,
  pa.downpayment_time, pa.status, pa.policy_id
FROM
  pdp_client_info AS cl
  JOIN pdp_policy_info AS po ON (cl.id = po.id)
  JOIN pdp_payment AS pa ON (po.id = pa.policy_id)
WHERE
  (pa.downpayment_date = '$current_date')
  AND (pa.status IN ('pending', 'failed', 'application', 'submitted', 'canceled'))
ORDER BY
  FIND_IN_SET(pa.status, 'pending,failed,application,submitted,canceled')

关于mysql - 按特定值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9403894/

相关文章:

mysql - 指令删除的 hibernate 问题

python - Flask/SQLAlchemy - 如何全局使用 latin-1 而不是 UTF-8?

sql - 使用不确定数量的参数时如何避免动态 SQL?

mysql - 我如何合并带有时间戳的行并受 id 限制并循环它?

sql - 如何忽略 Oracle 分析函数中的空值

sql - 为什么在使用OVER(PARTITION BY x)时需要在GROUP BY中包含一个字段?

python - Pylons 错误 - 'MySQL server has gone away'

php - 存储单个 IP、IP 范围、IP block 和 IP 类别并快速搜索它们的最佳方式

MySQL:为什么有多个root用户?

sql - SQL 中正则表达式的字符串追加 (Microsoft SQL Server 2008 R2)