1

私はホスティング会社で働いており、インストール、新しいドメイン、ラグの修正などのリクエストを頻繁に受け取ります。まだ開いているものの概要を把握するために、本当にシンプルなチケットシステムを作成することにしました。私はPHPの知識とMySQLの知識を少し持っています。今のところ、お客様からのメールや電話に基づいて、自分たちでチケットを提出します。

次のSQL構造を作成しました。

|| TICKETS  ||    || STATUSSES  ||    || STATUS-CODES  ||
--------------    ----------------    -------------------
| ID         |    |  ticket_id   |    | ID              |
| cust_name  |    |  status_id   |    | status_txt      |
| cust_cntct |    |  datetime    |    -------------------
| subject    |    ----------------
| message    |    
--------------     

ここで、既存のすべてのチケットを表示するオーバービウテーブルを作成します。チケットはデフォルトのステータスで挿入されます。同時タイムスタンプは、チケットが追加された時刻になります。チケットが次のステータスに移動するたびに、タイムスタンプ付きの新しいステータスが追加されます。最新のステータスは常に現在のステータスです。

最新のステータスを持つすべてのチケットを取得するクエリを作成する方法がわかりません。単純な参加では、ステータスの数だけチケットが返されます。結合を作成したいのですが、ステータスのタイムスタンプが特定のチケットの最新である場合の結果のみを表示します。

4

1 に答える 1

2

これを試して:

SELECT  a.*, b.`datettime`, d.status_txt
FROM    tickets a
            INNER JOIN statusses b
                on a.id = b.ticket_ID
            INNER JOIN
            (
                SELECT  ticket_ID, MAX(`datetime`) CurrentTicketDate
                FROM    Statuses
                GROUP BY ticket_ID
            ) c
                ON  b.ticket_ID = c.tecket_ID AND
                    b.`datetime` = c.CurrentTicketDate
            INNER JOIN Status_Codes d
                on b.status_ID = d.id
于 2012-08-20T08:15:11.170 に答える