将SQL COUNT结果放入php变量中

时间:2014-07-14 12:22:54

标签: php sql mysqli count

我所拥有的问题希望相当简单,但我已经在几天内围绕各种不同的解决方案喋喋不休。我有一个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);

1 个答案:

答案 0 :(得分:0)

对于那些想知道的人,我解决了这个原因,因为有一个简单的问题;我应该在运行索引查询时在第一个mysqli运行中运行$ userscore查询!愚蠢的错误,但我们都做出来了; o