我正在尝试将一个票务系统添加到为网站其余部分提供支持的自定义后端。我在订购门票时遇到了一些麻烦(一旦做出回复)。我对MySQL很新,不太清楚如何继续。
目前我有以下内容:
SELECT * FROM tbl_tickets ORDER BY ti_date_last_reply DESC, ti_date_raised DESC LIMIT 0, 20
上述工作正常,但如果新票证被提出,则现有的回复会显示在其上方。
我有4个故障单状态存储在ti_status
- 打开(新故障单),已回答(管理员已回复故障单),客户-Reply (客户已回复或向故障单添加了更多信息),已关闭(故障单已关闭)。
如果故障单状态为打开(最早的),则我希望MySQL按ti_date_raised
订购,然后添加客户回复在ti_date_last_reply
中可以找到插入正确时间范围的内容。将已回答和已关闭留在这些查询下方(最早到最年轻) - 但已回答高于已关闭
示例(我在这里使用了日期/时间,但我在脚本中使用了Unix时间):
Date Raised | Date Replied | Status
----------------------------------------------------------
2011-01-30-20-30 | - | Open
2011-01-31-01-00 | 2011-02-01-09-30 | Customer-Reply
2011-02-01-10-30 | - | Open
2011-02-01-20-00 | 2011-02-01-20-30 | Answered
2011-02-01-21-00 | 2011-02-01-20-35 | Closed
这样的事情可能吗?
答案 0 :(得分:1)
SELECT *
FROM tbl_tickets
ORDER BY FIND_IN_SET(ti_status,'Open,Customer-Reply,Answered,Closed'),
IF(ti_status = 'Customer-Reply', ti_date_last_reply, ti_date_raised) DESC
LIMIT 0, 20
将ti_status
更改为状态ID号并将状态(和排序号)存储在第二个表中将使性能提高一个数量级。