我的这个查询可能会返回多个结果。是否可以按照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/