GFDB-ガルフレランキングデータベース-

SQL 実行フォーム

SQL:

登録SQL一覧

登録SQL一覧

説明

◆データベースはsqlite3です。
◆禁止ワードCREATE, DELETE, UPDATE, INSERT, ALTER, RENAME, ADD, DROP, ;(セミコロン)

独自関数、名前付きプレースホルダ (formから送信した値をバインド)が使えます!  NEW! 

userId, clubIdとして取得したデータには自動的にGFDBの内部リンクを付加します。
◆仕様:
・過負荷を避ける為、入力したSQL末尾に自動で" LIMIT 1000 OFFSET :offset;"を追加し、1000件毎にページ分割します
→ ※LIMITサブクエリ内でのみで使えます
・実行時間が10秒を超える重いSQLは実行できません。(Fatal Errorになります。)

◆テーブル情報: (テーブルスキーマ

users … ユーザー情報
userId userName clubId level insDatetime plusminus
INTEGER TEXT INTEGER INTEGER INTEGER INTEGER
ユーザーID ユーザー名 部活ID レベル(※4) GF開始日時(※5) GF開始日時の最大誤差(秒)
ranking … 個人ランキング
event rank point userId
TEXT INTEGER INTEGER INTEGER
イベントID(※1) 順位 ポイント ユーザーID
clubs … 部活情報
clubId clubName level
INTEGER TEXT INTEGER
部活ID 部活名 部活レベル(※4)
maxClubMembers … 最大部員数情報
level maxMembers
INTEGER INTEGER
部活レベル 最大部員数
clubranking … 部活ランキング
event rank point clubId
TEXT INTEGER INTEGER INTEGER
イベントID(※1) 順位 ポイント 部活ID
events … イベント情報
eventId eventName sortNumber termStart termEnd blogEntry
TEXT TEXT INTEGER INTEGER INTEGER INTEGER
イベントID(※1) イベントタイトル ソート用ID 開始日(※2) 終了日(※2) 公式ブログの記事ID
uptime … 更新日
num time
INTEGER INTEGER
更新(バックアップ)番号(何回目か) 更新日(※2)
crownRanking … 王冠ランキング情報
endDatetime rank userId crownCount
INTEGER(※2) INTEGER INTEGER INTEGER
集計終了日 順位(同率順位加味) ユーザーID 王冠獲得数
userHistory … 部活所属履歴
userId clubId num
INTEGER INTEGER INTEGER
ユーザーID 部活ID(※3) 更新番号
clubHistory … 部活名変更履歴
clubId clubName num
INTEGER TEXT INTEGER
部活ID 部活名 更新番号

※1:rankingとclubrankingのevent、eventsのeventIdは同じもの(各イベントのアルファベット1文字+数字2桁・・・R01、S10など)
  イベントのアルファベット・・・レイド:R, マラソン;M, 対抗戦:C, ふむふむ:S, ハンターズ:W
※2:年4桁+月2桁+日2桁
※3:部活未所属のユーザーには部活IDに「0」を割り当てています。
※4:レベルデータが無いユーザー・部活はレベル「0」と割り当てています。
※5:UNIX時間(UNIX time)です。(1970年1月1日午前0時0分0秒からの経過秒数)

独自関数

PDO::sqliteCreateFunctionを利用して実装しています。

myDate(date)

Ymd形式の日付をY-m-d形式の文字列に変換します。
引数に年4桁+月2桁+日2桁の数値及び文字列を渡すことで、年4桁-月2桁-日2桁の文字列を取得できます。
例)「myDate(20160101)」で 「2016-01-01」が取得できます。

u2d(unixtime)

unixtimeY-m-d H:i:s形式の文字列に変換します。
(PHP) function u2d($unixtime) { return strftime("%Y-%m-%d %H:%M:%S", (int)$unixtime); }

d2u(datetime)

Y-m-d H:i:s形式及び Y-m-d形式の文字列をunixtimeに変換します。
(PHP) function d2u($date) { $dt = new DateTime($date); return $dt->format('U'); }

名前付きプレースホルダ

SQL文に名前付きプレースホルダを利用し、コメント欄でformを作ることで、
formから送信した値をプレースホルダにバインドできます。
デフォルト値はコメント欄にJSON形式で記述します。

例)SQL文に
SELECT u.userName FROM users u WHERE u.level >= :level
と入れSQLを1度実行後、コメント欄に

<form id="binds">
<input name="level" type="number">
<button type="submit">検索</button>
</form>
<!-- {"level": 200} -->

と設定することで指定レベル以上のユーザーを検索できます。

formのidbindsとし、input等のnameプレースホルダの名前と同じにして下さい。
(※プレースホルダの名前は「:offset」以外にして下さい。「:offset」は内部でページ分割に使用されています。)
また、<!-- -->の中にJSON形式デフォルト値を指定できます。
(複数のプレースホルダを利用する場合は、 <-- {"level": 200, name="五十鈴"} --> のようにして下さい。長くなる場合は複数行に跨っても問題ありません。)

コメント欄の改行は自動で<br>に置換されますが、行末に「¥」を記述することで自動改行を抑制できます。

リンク ★ おすすめ SQLite講座