2013-09-26 67 views
1

我需要從數組中找到最常見的值(不是0)。 我的代碼:MySQL + PHP array_count_values

include ("db.php"); 
    $query = "SELECT poll1 FROM names"; 
    $res = mysql_query($query) or die(mysql_error()); 

    while ($row = mysql_fetch_array($res)) { 
     echo $row['poll1']; 
    } 

和回聲結果(最小值0(默認)和最大3):

1 
1 
0 
0 
0 
2 
3 

最常見的值是 「1」。我不能使用array_count_values,因爲有7個數組數組。

+2

順便說一句,你不知道'的mysql _ **'功能** **已過時?您最好使用「PDO」。 – mpyw

+1

有一些簡單的方法可以在PHP中通過展開數組來實現,但是_proper_處理這個問題的方法是使用COUNT()聚合:SELECT count1,COUNT(*)AS count FROM names GROUP BY poll1' –

+0

你是什麼意思*和回聲結果(最小值0(默認值)和最大值3):*?你是否真的試圖找到最重要的價值,或者其他什麼? –

回答

2

這是一個你應該用SQL解決的問題。

首先,你想要得到的人選擇的每個選項的數量:

SELECT poll1, COUNT(*) AS count FROM names GROUP BY poll1; 
+-------+-------+ 
| poll1 | count | 
+-------+-------+ 
|  0 |  3 | 
|  1 |  2 | 
|  2 |  1 | 
|  3 |  1 | 
+-------+-------+ 
4 rows in set (0.00 sec) 

好吧,但你在零點不感興趣,而你只關心與count最大值的行,以便你應該降序排序count,並限制在1個結果:

SELECT poll1, count(*) AS count FROM names 
WHERE poll1 != 0 
GROUP BY poll1 
ORDER BY count DESC 
LIMIT 1; 
+-------+-------+ 
| poll1 | count | 
+-------+-------+ 
|  1 |  2 | 
+-------+-------+ 
1 row in set (0.00 sec) 
+0

完美的作品。如果我在一個頁面中有18個民意調查,有任何改變?像poll1,poll2,poll3,...,poll18 – oboshto