gpt4 book ai didi

php - 从另一个选择中选择一个条目

转载 作者:行者123 更新时间:2023-11-29 18:47:02 24 4
gpt4 key购买 nike

嘿,我正在尝试从指定的玩家 ID 中获取排名。

我使用 phpMyAdmin MySQL InnoDB 和 PHP。

我两个都有数据库。

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

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

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

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

.

$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
ORDER BY score DESC, timestamp ASC LIMIT 10;";

此查询返回具有正确排名的所有条目,但我只想要 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。

我尝试像这样将 Select 包装在另一个 Select 中,但我没有得到这样的结果。

$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;";

我尝试了上述示例的几种不同变体,但没有任何效果。我很确定应该可以有两个接一个的 SELECT 。我尝试遵循此post的答案这很接近我所追求的。

感谢任何帮助!

最佳答案

运行实验,使用不同的表和列,但有效地使用最终查询似乎会产生您正在寻找的结果。

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

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 |
+----+------------+--------------+------+

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

关于php - 从另一个选择中选择一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44547536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com