按数据库

时间:2016-10-26 05:41:17

标签: php mysql

这将是一个令人困惑的问题。我将尝试解释它并提供尽可能多的信息。基本上,我所拥有的是一个网站,人们可以上传他们在游戏中获得的杀戮量。我想做的是,在排行榜上显示人们的综合,确认杀人事件。这比我预期的更难(LOL)。

这是我的数据库的样子:

Database Screenshot

submission是条目的唯一ID。

usergt是用户的gamertag。

image并不重要。

userkilled是他们杀死的人。

status是确认杀人的状态。

conftotal是我们从图像中确认的总杀戮(例如,条目5记录了24次杀戮)。

submitted只是提交日期和时间的unix时间戳。

这是我页面上的PHP:

<?php
function getKills($gamertag) {
    $conn = new mysqli("localhost", "rpsanet_seals", "k_,2N2Xbu}mr", "rpsanet_seals");
    if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);} 

    $sql = "SELECT conftotal FROM kills WHERE usergt='" . $gamertag . "'";
    $result = $conn->query($sql);

    $ctotalklls = 0;

    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $ctotalklls = $ctotalklls + $row["conftotal"];
        }
    } else {
        $ctotalklls = 0;
    } 

    return $ctotalklls;

    $conn->close();
}
?>
            <div class="mykills_content">
                    <table class="mykills_table">
                        <tr>
                            <th class="mk_first">Avatar</th>
                            <th>Gamertag</th>
                            <th>Latest Victim</th>
                            <th class="mk_last">Total Kills</th>
                        </tr>
                        <?php

                            $conn = new mysqli("localhost", "rpsanet_seals", "k_,2N2Xbu}mr", "rpsanet_seals");
                            if ($conn->connect_error) {die("Connection failed: " . $conn->connect_error);} 

                            $sql = "SELECT *, COUNT(*) AS magnitude 
                            FROM kills
                            WHERE status='confirmed'
                            GROUP BY usergt 
                            ORDER BY magnitude ASC 
                            LIMIT 5";
                            $result = $conn->query($sql);

                            if ($result->num_rows > 0) {
                                 while($row = $result->fetch_assoc()) {
                                     echo '
                                     <tr>
                                         <td class="mykills_submission" data-submission="' . $row["submission"] . '">
                                             <div class="mykills_avatar">
                                                 <img src="https://avatar-ssl.xboxlive.com/avatar/' . $row["usergt"] . '/avatarpic-l.png" class="mykills_victim_avatar" draggable="false" />
                                             </div>
                                         </td>

                                         <td>
                                             ' . $row["usergt"] . '
                                         </td>

                                         <td>
                                             ' . $row["userkilled"] . '
                                         </td>

                                         <td>
                                             ' . getKills($row["usergt"]) . '
                                         </td>
                                     </tr>

                                     ';
                                 }
                                 echo '</table>'; 
                            } else {
                                 echo '</table><div class="fw-nokills">You have not submitted any kills yet.</div>';
                            }

                            $conn->close();
                        ?>
                </div>
            </div>

这就是它在页面上的样子:

page sample

我不知道我做错了什么或如何解决它。如您所见,订单不正确。它应该是CheapApples12,然后是KILLER C00KIE X,然后是ancrobbo97。

如果还有其他任何不清楚的地方,或者需要任何其他信息,请发表评论,我会尽快将其发送给任何人......

我提前感谢任何帮助:)

重要信息:上面屏幕截图中显示的“Total Kills”是从getKills()函数生成的,而不是数据库查询结果。

3 个答案:

答案 0 :(得分:1)

尝试使用sum(conftotal)这个简单的单行使用,并按sum(conftotal)

使用顺序
SELECT *,sum(conftotal) as totalkills FROM kills WHERE status='confirmed' GROUP BY usergt ORDER BY totalkills desc

答案 1 :(得分:0)

SELECT x.avatar, x.gamertag, x.magnitude AS magnitude FROM
( SELECT avatar,gamertag, COUNT(*) AS magnitude 
FROM kills
                            WHERE status='confirmed'
                            GROUP BY usergt 
                            LIMIT 5
) AS x
ORDER BY magnitude ASC 

我无法测试我写的内容,但我认为你可以从中得到逻辑。 使用子查询较慢,但它们非常强大。

答案 2 :(得分:0)

据我所知,您希望根据TotalKills计数显示降序,请尝试使用以下查询。

                       "SELECT *, COUNT(ref_column_name) AS magnitude 
                       FROM kills
                        WHERE status='confirmed'
                        GROUP BY usergt 
                        ORDER BY magnitude desc"