使用array_count_values提供的数据

时间:2016-06-12 15:35:46

标签: php mysql arrays

我创建了一个数组,它从数据库获取一些数据并将其输入数组。

使用array_count_values,我还可以找出每个值在数组中出现的次数,结果数组如下所示:

原始代码:

$winnersarray = array();
$winnersresults=mysql_query("SELECT r.driverId FROM results r JOIN calendar c ON r.eventID=c.id WHERE c.event='$eventName' AND c.competition='$competition_id' AND r.position='1' AND r.eventSession NOT IN ('T','P','Q','Q1','Q2','QA')");
while($row = mysql_fetch_assoc($winnersresults)) {
    $winnersarray[]=$row['driverId'];
}

print_r(array_count_values($winnersarray));

阵列打印:

Array ( [887] => 1 [191] => 1 [94] => 2 [253] => 1 [578] => 1 [50] => 2 [4] => 1 [179] => 1 [59] => 1 [95] => 1 [333] => 2 [936] => 1 )

此时,我卡住了。我想要实现的是一个表,其中包含值出现的实例数(即用户94,用户50和用户333为2),以及使用这些ID的其他数据(即与其关联的用户名和ID该ID位于1)的事件。

欢迎任何指向正确方向的指针!

编辑:来自维基百科的类似表格,展示了我希望最终表格数据的外观:http://i.imgur.com/o5ZFH7r.png 该表按获胜次数排序,这也是我需要对上述数据进行的操作。

PS - 我知道mysql已被折旧 - 我正在浏览遗留代码并在我去的时候更新到mysqli。该网站是一个很好的4-5岁,所以有相当多的修补!

1 个答案:

答案 0 :(得分:1)

这可以使用SQL完成,不需要PHP数组函数。使用SQL的group bycountorder by。以下是它的工作原理:

SELECT count(r.driverId) as count, r.driverId 
FROM results r 
JOIN calendar c 
ON r.eventID=c.id 
WHERE c.event='$eventName' AND 
c.competition='$competition_id' AND 
r.position='1' AND 
r.eventSession NOT IN ('T','P','Q','Q1','Q2','QA') 
group by r.driverId 
order by count desc