繁体   English   中英

使用 PHP 获取 MySQL 中最流行的输入数据输入

[英]Get the most popular input data input in MySQL with PHP

我正在尝试制作一个网站以在我的网站上保留最佳时间记录。 目前,我正在努力获得最受欢迎的关卡。

我将 MySQL 与 phpMyAdmin (用于手动输入)和 PHP 结合使用来管理我的表。 目前我正在使用表 recordData 来跟踪某些记录。 该表由 uniqueID(int) (AI)、time(int)、timeUsername(varchar)(玩家有时间)、timeLevelID(int)(玩过的关卡)和一些其他无关数据组成。

我想要的是使用最多的 timeLevelID 中的 int 数据的 output。 请参阅以下数据以简化此概念:

唯一身份 时间等级ID
1 6
2 2
3 31
4 31
5 6
6 6

其中所需的 output 是排序计数表,按计数数据递减:

时间等级ID 数数
6 3
31 2
2 1

到目前为止我尝试过的:第一次尝试,我尝试弄乱 SQL 查询,但不知何故我从来没有让它工作。

    require_once "dbConnect.php";
    $allRecordsDataSQL="SELECT timeLevelID COUNT(timeLevelID) AS timeLevelIDFrequency FROM recordData GROUP BY timeLevelID ORDER BY timeLevelIDFrequency DESC";
    $allRecordsData = $conn->query($allRecordsDataSQL);
    print_r($allRecordsData);
    while($row=$allRecordsData->fetch_array(MYSQL_ASSOC)){
        echo $row["timeLevelID"];
    }

这会产生以下错误,并且不会在 print_r 上返回任何内容 - 我假设 $allRecordsData 为假?

Fatal error: Uncaught Error: Call to a member function fetch_array() on boolean

在我的第二次尝试中,我尝试将所有数据捕获到一个新数组中。 新数组将计算每个级别的级别数量,然后我对数组和 output 它的数据进行排序。

require_once "dbConnect.php";
    $allRecordsDataSQL="SELECT timeLevelID FROM recordData";
    $allRecordsData = $conn->query($allRecordsDataSQL);
    
    
    $arrayCounter = array_fill(1, $allRecordsData->num_rows, 0);
    while($row = $allRecordsData->fetch_array(MYSQLI_ASSOC)){
         $arrayCounter[$row["timeLevelID"]]++; 
    }
    rsort($arrayCounter);
    foreach($arrayCounter as $key => $val){
        echo "<br>";
        echo "$key = $val\n";
    }

第二次尝试确实有效 PHP 明智,但 output 如下,我不知道该怎么做:

0 = 4
1 = 3
2 = 3
3 = 3 ..etc..

我认为我的第一次尝试有一个愚蠢的错误,但我似乎无法发现它(我是 MySQL 和 PHP 的新手,抱歉)。 尽管如此,我确实认为第一次尝试是最有效的,所以我想以这种方式解决我的问题。

谢谢,鲁本

您尚未包含 dbConnect.php 文件的源代码。 它似乎在抑制错误,这就是为什么您在 SQL 查询中没有为错误引发异常的原因。 SELECT 列表中的 timeLevelID 后缺少逗号 -

require_once "dbConnect.php";

$allRecordsDataSQL="SELECT timeLevelID, COUNT(timeLevelID) AS timeLevelIDFrequency FROM recordData GROUP BY timeLevelID ORDER BY timeLevelIDFrequency DESC";
$allRecordsData = $conn->query($allRecordsDataSQL);

使用 var_dump 而不是 print_r 通常会告诉您更多信息(也许是布尔值 false)-

var_dump($allRecordsData);
while($row=$allRecordsData->fetch_array(MYSQL_ASSOC)){
    echo $row["timeLevelID"];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM