「stats」と「users」という名前の2つのテーブルがあります
usersテーブルには、id、username、password、email(columns)などの一般的なユーザーデータがすべて含まれています
。statsテーブルには、id、attack、defense、ostats、gold、food(columns)があります。
これらの2つのテーブルのデータを並べて表示し、IDSを介してデータをリンクさせたいとします。たとえば、
Rank user_uid ostats attack defense gold
1 Test 10 5 5 100
2 Test2 8 2 6 60
3 Test3 6 5 1 40
ユーザー名はテーブル「users」からのもので、残りはテーブル「stats」からのもの
です。最初に、Username(user_id = 1)やostats、attack、defense、などの同じIDのデータをリンクして表示する方法を知りたいと思います。金、食品(id = 1)
次に、「ostats」の順に並べます(どのテーブルにも「rank」という名前の列はまだありません。全体的な統計情報を使用してランクを作成する方法がわかりません)
あなたは(未テスト)のようなことをすることができます
SELECT u.username, s.overall, s.attack, s.defense, s.gold
FROM stats s JOIN users u on s.user_uid = u.id
ORDER BY s.overall;
ランキングの可能な解決策:
set @row_number=0;
SELECT (@row_number:=@row_number+1) as rank, u.username, s.overall, s.attack, s.defense, s.gold
FROM stats s JOIN users u on s.user_uid = u.id
ORDER BY s.overall;
別の恐ろしい見た目の試み:
set @row_number = (select count(*) from users) + 1;
select (@row_number:=@row_number-1) as rank, u.username, s.overall from
stats s join users u on s.user_uid = u.id order by s.overall desc;
set @row_number = 0;
ここPHPコードでは、変数を設定するために2つのクエリとして実行してから、実際のランキングクエリを実行する必要があります。このように、これを実行すると、ランク変数は常に0に設定されます。少し単純化するために、異なるテーブル名と列名を使用していることに注意してください。特定のニーズに合わせて調整することを忘れないでください。
// connect to database
$conn = mysqli_connect("localhost", "user", "password", "database");
// this query will set a variable to 0.
$setSql = "SET @row_number = 0;";
// run the query. This will return a boolean - true or false, depending on whether or not the query ran successfully
$variableSet = mysqli_query($conn, $setSql);
// if the query ran successfully
if($variableSet){
// setup the actual ranking query
$statsSql = "select
(@row_number:=@row_number+1) as rank,
u.id,
u.username,
s.overall
from
mstats s
join
musers u
on
s.muser = u.id
order by
s.overall desc;";
$ranks = mysqli_query($conn, $statsSql);
if(!$ranks){
// dump error from rank query
var_dump($conn->error);
} else {
// dump results as associative array
var_dump($ranks->fetch_all(MYSQLI_ASSOC));
}
} else {
// dump errors from setting variable
var_dump($conn->error);
}
私にとって、結果ダンプは次のようになります。
array (size=3)
0 =>
array (size=4)
'rank' => string '1' (length=1)
'id' => string '2' (length=1)
'username' => string 'Bar' (length=3)
'overall' => string '1000' (length=4)
1 =>
array (size=4)
'rank' => string '2' (length=1)
'id' => string '6' (length=1)
'username' => string 'Tom' (length=3)
'overall' => string '7' (length=1)
2 =>
array (size=4)
'rank' => string '3' (length=1)
'id' => string '1' (length=1)
'username' => string 'Foo' (length=3)
'overall' => string '3' (length=1)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加