Friday, March 30, 2007

ErogameScape的SQL功能

前幾天我玩完了Forest後相當感動,於是上ErogameScape查資料。查著查著,我越來越覺得網頁的某些設計上不太合理,例如說POV中的遊戲排序是依照數量而非登錄比例來排序。就在我準備寫信給站長,在網頁上尋找E-mail address時,才發現有個我從來沒用過的功能可以辦到這件事:

http://erogamescape.dyndns.org/~ap2/ero/toukei_kaiseki/select.php

這個功能被我忽略這麼多年的原因有二,一是以前我根本就不知道SQL是什麼(後來考預官的時候才知道這是資料庫的一種),二則是SQL中間有Q這個字母,因此多少降低了我點選的欲望。不過看了一下,別人寫的指令似乎可以做很多有趣的事的樣子,所以決定開始學一下。

從不知道SQL是什麼到寫下下面的指令花了我七八個小時,原本想說看別人寫什麼再依樣畫葫蘆即可,沒想到SQL博大精深、指令實在難猜,最後還是參考網路資料才了解SQL是怎麼回事。

OK,下面這個指令計算哪些遊戲是爆笑game之王、好音樂之王……
SELECT g.gamename as game, tb1.ct1 as Npov, tb2.ct2 as Ndata, round(tb2.ct2*1.0/tb1.ct1,2) as normalize from (select pg.game, count(pg.game) as ct1 from povgroups pg where pov=10 group by pg.game)tb1, (select game, count(game) as ct2 from userreview group by game order by game)tb2, gamelist g where g.id=tb1.game and g.id=tb2.game and tb2.ct2>99 and tb2.ct2*1.0/tb1.ct1 < 25 order by normalize;
以上的指令挑出符合「登錄在10號POV下」、「データ数(Ndata)大於99」、「データ数(Npov)除以POV登錄次數(normalize)小於25」三個條件的所有遊戲。一個遊戲排在越前面,表示它的10號POV屬性越強烈。

想執行上面指令的人把它copy進上面網頁的表格即可,記得最前的的SELECT要拿掉。將pov=10改成pov=id可以查詢第id號POV的結果。如果不知道第幾號POV的內容是什麼,則執行「SELECT id, title from povlist order by id;」就會給你一張id與內容對應的表格。

另外要說,這個指令在計算データ数上有可能有誤,數字與網頁上的データ数有些微差異,我找了半天也沒找到網頁上的データ数是算哪裡(我現在相當確定這個データ数有問題,它對於一個月內出版的新遊戲不準)。

有了指令以後,就可以開始來玩ErogameScape的資料了。下面是我昨晚的一些結果,有機會再討論這些結果與各種POV性質的關連性。

"ErogameScape, The POV Tables" version 1.0, last edited in 2007.3.31

關於ErogameScape,參照:

"ErogameScape, How to use" version 1.0, last edited in 2005.2.12

No comments: