我所拥有的问题希望相当简单,但我已经在几天内围绕各种不同的解决方案喋喋不休。我有一个PHP脚本,可以做几件不同的事情来返回一组结果,到目前为止工作的是我可以得到一个玩家的名字,产生命中得分以及5在他之上和之下4。
为了解释我的问题,想象出活跃玩家的得分是第432分,而不是将得分显示为1.,2.,3等等,我需要在他的旁边显示432得分,431为上述等等。
我计划通过运行COUNT查询来检查播放器上方有多少分数(为了获得他在列表中的位置,然后替换使用我的$ i变量用于监听分数的位置变为$ i) = $ resultfromcount - 4,这样它就会显示每个得分的正确记分位置。我在获得$ i存储正确的东西方面遇到了问题,但是根据几个不同的理论解决方案并没有。有些人我得到的错误与访问非对象中的成员函数有关,或与其他人有关$ i只是空的。
这里有我的代码(其中一些是无关紧要的,但我认为最好显示整个脚本)去掉了我尝试的不同解决方案,下面你看到的只是返回null对于$ i:
// 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);
答案 0 :(得分:0)
对于那些想知道的人,我解决了这个原因,因为有一个简单的问题;我应该在运行索引查询时在第一个mysqli运行中运行$ userscore查询!愚蠢的错误,但我们都做出来了; o