[英]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.