如何 link 和显示 MySQL 来自两个不同表的数据?
How to link and display MySQL data from two different tables?
我有两个 table 名为 "stats" 和 "users"
users table 拥有所有典型的用户数据,如 id、用户名、密码、电子邮件(列)
stats table 有 id,attack,defense,ostats,gold,food(columns)
我想并排显示来自这两个 table 的数据,并通过它们的 IDS link 编辑数据
例如,
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
用户名来自table "users" 其余来自table "stats"
所以首先我想知道如何 link 并显示来自相同 ID 的数据,例如 Username(user_id=1) 和 ostats,attack,defense,gold,food(id=1)
然后我希望它们按 "ostats" 排序(我在任何 table 中都没有名为 "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代码中,你必须运行它作为两个查询来设置变量,然后运行实际排名查询。这样,当 运行 执行此操作时,rank 变量始终设置为 0。请注意,我使用了不同的 table 和列名,只是为了稍微简化一下。请记住根据您的特定需求进行调整。
// 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)
我有两个 table 名为 "stats" 和 "users"
users table 拥有所有典型的用户数据,如 id、用户名、密码、电子邮件(列)
stats table 有 id,attack,defense,ostats,gold,food(columns)
我想并排显示来自这两个 table 的数据,并通过它们的 IDS link 编辑数据 例如,
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
用户名来自table "users" 其余来自table "stats"
所以首先我想知道如何 link 并显示来自相同 ID 的数据,例如 Username(user_id=1) 和 ostats,attack,defense,gold,food(id=1)
然后我希望它们按 "ostats" 排序(我在任何 table 中都没有名为 "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代码中,你必须运行它作为两个查询来设置变量,然后运行实际排名查询。这样,当 运行 执行此操作时,rank 变量始终设置为 0。请注意,我使用了不同的 table 和列名,只是为了稍微简化一下。请记住根据您的特定需求进行调整。
// 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)