Minecraft のトップ リストの情報を表示するために 3 つのテーブルを調べる必要があるコードを取得しました。表は次のとおりです。
サーバー
id | user_id | name | information | websitename | websiteurl | postdate.. etc
これは、サーバー名、Web サイト情報 (サーバーの完全な説明) などを含むメイン テーブルです。
投票
id | server_id | username | ipaddress | votetimestamp
ウェブサイトでは、プレイヤーが 24 時間ごとに投票できるようにしています。すべての投票は、ゲーム内のユーザー名 (ユーザー名)、サーバー ID、投票時刻とともにこのテーブルに挿入されます。
ピング
id | server_id | min_player | max_player | motd | pingtimestamp
このテーブルは、fsock を使用して Web サーバーで実行されている CronJobs を使用して、10 分ごとに別のスクリプトによって更新されます。これを行うことで、サーバーがオフラインかオンラインか、オンラインのプレイヤーの数、同時にオンラインにできるプレイヤーの数を知ることができます。
インデックス ページで、3 つのテーブルすべてからデータを Web ページに引き出し、すべてのサーバーをデータベースの順序で表示するスクリプトを取得しました。
投票テーブルですでに投票を取得したすべてのサーバーを引き出すことができますが、まだ投票を受け取っていないサーバーがある場合、それはリストされません。これは私が使用するSQLコードです。
SELECT DISTINCT(ping.server_id), COUNT(vote.server_id) AS count, servers.id,
servers.name, servers.server_ip, ping.min_player,ping.max_player,ping.motd
FROM servers,vote,ping
WHERE servers.id = vote.server_id
AND servers.id = ping.server_id
GROUP BY servers.id
ORDER BY count DESC
LIMIT $start, $per_page
これは十分に簡単だと確信していますが、今いくつか試してみましたが、実際には何も機能していないようです。この時点で、SQL は私の得意分野ではないことを述べておくことをお勧めします。
編集 文字列の「DISTINCT」を削除しようとしましたが、何らかの理由で、サーバーを複数回表示しているすべてのサーバーの複数の行が返されます。すべてのサーバーは 1 回だけ表示され、最も多くの票を獲得したサーバーの後に上から下に並べ替えられます。