まずはじめに、各ユーザーがいつ、何のイベントを実行したのかを調べるSQLを作成します。
SELECT
userID,
startTime,
events.event_summary
FROM
eventlog
INNER JOIN events ON events.eventID = eventlog.eventID
ORDER BY userID;
このSQLを実行すると、
このように、ユーザーが登録したり、ログインしたりと、イベント情報が表示されます。
次に、userIDが2のユーザーに絞り込んで、登録やログインなどのシステム情報を非表示にして表示してみます。
これらのシステムイベントは、eventsテーブルにあるevent_stageカラムが0で登録されているので、event_stageカラムが0以外のイベントを表示するようにSQLを作成します。
SELECT
userID,
startTime,
events.event_summary
FROM
eventlog
INNER JOIN events ON events.eventID = eventlog.eventID
WHERE
userID = 2 AND events.event_stage <> 0;
WHEREを使い、userIDが2、それからeventsテーブルのevent_stageを<> 0(0以外)として表示させています。
このSQL文を実行すると、
このように、登録やログインなどのシステム情報が表示されず、ユーザーがゲームをプレイしている流れがわかりやすく表示されました。
次に、全ユーザーに対して、中ボスやラスボスと戦ったイベントだけを抽出して表示させます。
ボス達との闘いは、event_summaryに、”~~との闘い”のようにデータが保存されてあるので、その文字列に対して検索をする必要があります。
そのために、LIKE命令を使ってSQLを作成します。
SELECT
userID,
startTime,
events.event_summary
FROM
eventlog
INNER JOIN events ON events.eventID = eventlog.eventID
WHERE
events.event_stage <> 0
AND events.event_summary LIKE '%との闘い'
ORDER BY
userID, startTime;
WHERE句で、event_stageが0以外のものでシステムイベントを除きつつ、event_summaryに、との闘いで終わる文字列をLIKE句を使って検索しています。
このSQLを実行すると、
このように~~との闘いと、ボス戦のみが表示されました。
LIKEで使用している%は、0文字以上の任意の文字列を検索しています。
ですので、’%との闘い’と指定した場合は亡霊との闘いやダダメシとの闘いなどが表示されます。
いわゆるワイルドカードと呼ばれるもので、他にも_があり、こちらは_は任意の1文字を指定します。
例えばこれをLIKE句で、’亡霊との%’ で指定した場合は、このようになります。
亡霊との闘い、亡霊との会話のみが表示されました。