次のテーブルを作成します
$sql[] = "CREATE TABLE IF NOT EXISTS #__GmQuestions(
QnID int(11) NOT NULL AUTO_INCREMENT,
Question text COLLATE utf8_unicode_ci NOT NULL,
Answer text COLLATE utf8_unicode_ci NOT NULL,
QnLevel int(11) NOT NULL,
QnPrize text COLLATE utf8_unicode_ci,
QnPoints DECIMAL( 10, 2 ) NOT NULL,
PRIMARY KEY (QnID),
)";
および次の表
$sql[] = "CREATE TABLE IF NOT EXISTS #__GmHistory(
HsID int(11) NOT NULL AUTO_INCREMENT,
HsGamerID int(11) NOT NULL,
HsQnID int(11) NOT NULL,
Hspoints DECIMAL( 10, 2 ) NOT NULL,
HsAnswer varchar(55) COLLATE utf8_unicode_ci NOT NULL,
HsStatus varchar(55) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Pending',
HsDateCreated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
HsPrize varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (HsID)
)";
レベル列には 1 ~ 10 の整数が含まれます。Qnlevel=1 の質問からランダムな質問を選択したいのですが、この質問は以前にユーザーによって回答されていてはなりません。だから私はこのクエリを持っています
//SELECT GAMERS question HISTORY
$result = mysql_query("SELECT HsQnID FROM #__QnHistory WHERE HsGamerID LIKE GamerID");
$Answeredquestions = Array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$Answeredquestions[] = $row['QnID'];
}
// I now select questions making sure the user hasent anweres them
$query="SELECT * FROM #__GmQuestions WHERE QnLevel = 1 AND QnID NOT IN ('.implode(',', $Answeredquestions).')";
私の大きな問題は、これらの選択された質問から 1 つのランダムな質問を選択する必要があることです。私のデータベースは最大 600,000 の質問があります。大きなデータベースでの rand() についていくつかの不満を見てきました。エイミーは、ユーザーがまだ回答していないランダムな質問を 1 つだけ選択する方法を考えています。私はまだ開発中なので、テーブルを変更することを意味する場合でも、すべての回答を歓迎します