Php 从另一个条目中选择一个条目
嘿,我正试图从指定的玩家id中获得排名 我使用phpMyAdmin、MySQL、InnoDB和PHP 我有两个数据库 Userdatabase有一个名为users的表。 该表有5个字段:id、用户名、电子邮件、密码和日期 第二个数据库称为分数,每个级别有一个表。 所有表都有相同的字段:id、分数、时间、奖金、时间戳 我立即连接到分数数据库,如下所示: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); 此查询返回所有具有正确排名的条
$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 |
+----+------------+--------------+------+