【问题标题】:Putting SQL COUNT result into a php variable将 SQL COUNT 结果放入 php 变量中
【发布时间】: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/…
  • 您的意思是我可以尝试将其合并到正在运行的主查询中吗?实际上,我曾经尝试过这样做,但遇到了麻烦并且没有得到结果。
  • 是的,你可以这样算。
  • 虽然不是通过这种方法,但实际上我现在已经让它工作了(我发现我有某些查询没有运行正确的东西)但这本来是可行的并且是可能当我开始优化时我会推进它,所以非常感谢你:)

标签: php sql mysqli count


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2021-01-26
    • 2017-06-02
    • 2018-05-14
    • 2016-05-30
    相关资源
    最近更新 更多