I’m trying to add a ticketing system to a custom back-end that powers the rest of the site. I’m having a bit of trouble though in ordering the tickets (once a reply has been made). I am fairly new to MySQL and not quite sure how to proceed.
At the moment I have the following:
SELECT * FROM tbl_tickets ORDER BY ti_date_last_reply DESC, ti_date_raised DESC LIMIT 0, 20
The above works fine except that if a new ticket is raised the existing replies appear above it.
I have 4 ticket status stored in ti_status – Open (a new ticket), Answered (admin has replied to ticket), Customer-Reply (customer has replied or added more info to ticket), and Closed (ticket is closed).
What I would like is for the MySQL to order them by ti_date_raised if the ticket status is Open (oldest first), then add Customer-Reply which is found in ti_date_last_reply to slot into the correct time frame. Leaving Answered and Closed to appear below these queries (oldest to youngest) – but Answered goes above Closed
Example (I used date/time here, but I use Unix time in the scripts):
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
Is such a thing possible?
Changing
ti_statusto a status ID number and storing the statuses (and sort number) in a second table will improve performance by a order of magnitude.