【发布时间】:2014-07-14 12:22:53
【问题描述】:
希望我遇到的问题相当简单,但几天来我一直在寻找各种不同的解决方案,但没有运气。我有一个 php 脚本,它正在做几个不同的事情来返回一组结果,到目前为止,我可以得到一个玩家的名字,产生命中分数以及上面的 5 和下面的 4。
为了解释我的问题,想象一下活跃玩家的分数是第 432 高分,而不是显示分数为 1.、2.、3. 等等,我需要在他的分数旁边显示 432,431 表示以此类推。
我打算通过运行一个 COUNT 查询来检查玩家上方有多少分数(为了让他在列表中的位置,然后替换使我用于收听分数位置的 $i 变量变为 $i = $resultfromcount - 4,这样它就会为显示的每个分数显示正确的记分牌位置。我在让 $i 存储正确的东西时遇到了问题,遵循几种不同的理论解决方案并没有奏效。有一些我'得到与'访问非对象中的成员函数'相关的错误,或者与其他人 $i 只是空的。
这是我的代码(其中一些无关紧要,但我认为最好显示整个脚本)剥离了我尝试过的不同解决方案,您在下面看到的只是为 $i 返回 null:
// CONNECT TO THE DATABASE
$DB_NAME = 'mydb';
$DB_HOST = 'myhost';
$DB_USER = 'myuser';
$DB_PASS = 'mypass';
$name = ($_GET['name']);
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Querying the several queries needed and combining them
$allquery = "SELECT *
FROM `scores`";
$scoreresult = "SELECT `score`
FROM `scores`
WHERE `name` = '$name'";
$userscorequery = " SELECT * FROM
(
(
SELECT * FROM
(
SELECT *
FROM `scores`
WHERE `score` >= ($scoreresult) ORDER BY `score` ASC LIMIT 5
) `finalResult` ORDER BY `score` DESC
)
UNION ALL
(
SELECT * FROM
(
SELECT *
FROM `scores`
WHERE `score` < ($scoreresult) ORDER BY `score` DESC LIMIT 5
) `secondFinal` ORDER BY `score` ASC
)
) `nearScores` ORDER BY `score` DESC";
$indexing = "SELECT COUNT(*)
`index`
FROM `scores`
WHERE `score` > ($scoreresult)";
$indexresult = $mysqli->query($userscorequery) or die ($mysqli->error.__LINE__);
$result = $mysqli->query($userscorequery) or die($mysqli->error.__LINE__);
if($result->num_rows > 0) {
$ind = $indexresult->fetch_assoc();
$i = $ind[0];
echo $i;
} else {
echo 'NO INDEX';
}
// GOING THROUGH THE DATA
if($result->num_rows > 0) {
while ( $row = $result->fetch_assoc() ) {
echo "$i. \t \t {$row['name']} \t \t \t \t \t {$row['score']}m \n";
$i++;
}
}
else {
echo 'NO RESULTS';
}
// CLOSE CONNECTION
mysqli_close($mysqli);
【问题讨论】:
-
您可以在查询中完成所有操作 - stackoverflow.com/questions/5159064/…
-
您的意思是我可以尝试将其合并到正在运行的主查询中吗?实际上,我曾经尝试过这样做,但遇到了麻烦并且没有得到结果。
-
是的,你可以这样算。
-
虽然不是通过这种方法,但实际上我现在已经让它工作了(我发现我有某些查询没有运行正确的东西)但这本来是可行的并且是可能当我开始优化时我会推进它,所以非常感谢你:)