Php 从另一个条目中选择一个条目

Php 从另一个条目中选择一个条目,php,mysql,rank,userid,Php,Mysql,Rank,Userid,嘿,我正试图从指定的玩家id中获得排名 我使用phpMyAdmin、MySQL、InnoDB和PHP 我有两个数据库 Userdatabase有一个名为users的表。 该表有5个字段:id、用户名、电子邮件、密码和日期 第二个数据库称为分数,每个级别有一个表。 所有表都有相同的字段:id、分数、时间、奖金、时间戳 我立即连接到分数数据库,如下所示: $conn = mysqli_connect($host, $user, $pass, $mysql_db); 此查询返回所有具有正确排名的条

嘿,我正试图从指定的玩家id中获得排名

我使用phpMyAdmin、MySQL、InnoDB和PHP

我有两个数据库

Userdatabase有一个名为users的表。 该表有5个字段:id、用户名、电子邮件、密码和日期

第二个数据库称为分数,每个级别有一个表。 所有表都有相同的字段:id、分数、时间、奖金、时间戳

我立即连接到分数数据库,如下所示:

$conn = mysqli_connect($host, $user, $pass, $mysql_db);

此查询返回所有具有正确排名的条目,但我只想要id为$userid的条目,因此我尝试:

$multisql .= "SET @rank := 0;";
$multisql .= "SELECT *, @rank := @rank + 1 AS rank FROM $table AS s
LEFT JOIN userdatabase.users AS u ON s.id = u.id
WHERE u.id = $userid
ORDER BY score DESC, timestamp ASC LIMIT 10;";
这仅返回指定的用户结果,但排名始终为1

我尝试用另一个类似这样的选择来包装选择,但这样做并没有得到结果

$multisql .= "SET @rank := 0;";
$multisql .= "SELECT * FROM (
SELECT *, @rank := @rank + 1 AS rank FROM $table AS s
LEFT JOIN userdatabase.users AS u ON s.id = u.id
ORDER BY score DESC, timestamp ASC
) rank WHERE id = $userid;";
我尝试了上述示例的几种不同变体,但没有任何效果。我很确定应该可以有两个选择一个接一个。我试着从这个答案,这是接近我所追求的


感谢您的帮助

运行一个实验,使用不同的表和列,但有效地使用最终查询,似乎可以得到您想要的结果

首先是显示测试表中所有记录和所有定义列的基本查询

mysql>select * from `customers`;
+----+---------------------+-------------------+
| id | cust_name           | cust_address      |
+----+---------------------+-------------------+
|  0 | Charlie Farnsbarnse | Alpha Centauri    |
|  1 | Joe Bloggs          | Nowhere Important |
|  2 | Fred SMith          | Somewhere else    |
|  3 | Barney Gumble       | Brooklyn          |
|  4 | Betty Boop          | Hollywood         |
+----+---------------------+-------------------+
然后,在设置变量之后,运行一个新的查询来显示每个变量的排名

mysql>set @id=4;
set @rank := 0;
select *, @rank := @rank + 1 as 'rank' from `customers`;

+----+---------------------+-------------------+------+
| id | cust_name           | cust_address      | rank |
+----+---------------------+-------------------+------+
|  0 | Charlie Farnsbarnse | Alpha Centauri    |    1 |
|  1 | Joe Bloggs          | Nowhere Important |    2 |
|  2 | Fred SMith          | Somewhere else    |    3 |
|  3 | Barney Gumble       | Brooklyn          |    4 |
|  4 | Betty Boop          | Hollywood         |    5 |
+----+---------------------+-------------------+------+
最后,通过where子句施加的附加限制,只返回一条记录,其排名如前一个查询中所示

mysql>set @rank := 0;
select * from (
    select *, @rank := @rank + 1 as 'rank' from `customers` as s
) rank where id = @id;


+----+------------+--------------+------+
| id | cust_name  | cust_address | rank |
+----+------------+--------------+------+
|  4 | Betty Boop | Hollywood    |    5 |
+----+------------+--------------+------+

这是从命令行运行的,但我看不出为什么在sql中替换PHP变量时使用PHP变量
$userid
会失败。

您正在执行
SET@rank:=0@rank:=@rank+1
你期望什么?当我做
设置@rank:=0
@rank:=@rank+1
在第一个示例中效果很好,我从每个条目中获得了正确的排名。最后一个示例对我有效(尽管有点编辑以适应db),它与我在最后提到的帖子中所做的相同。对不起,我误解了你的问题
mysql>set @rank := 0;
select * from (
    select *, @rank := @rank + 1 as 'rank' from `customers` as s
) rank where id = @id;


+----+------------+--------------+------+
| id | cust_name  | cust_address | rank |
+----+------------+--------------+------+
|  4 | Betty Boop | Hollywood    |    5 |
+----+------------+--------------+------+