2012-04-04 8 views
0

私は多くのレコードを含むテーブルを持っています。私は要素が何回繰り返されたかを数える効率的な方法を探しています。テーブル内で何回要素が繰り返されているか

例テーブル:

id  name 
1  ana 
2  john 
3  tom 
4  ana 
5  john 

私がこれまで行ってきたが、それは非効率的です。

$number = 0; 
for ($i =1 ; $i <= mysql_num_rows($query) ; $i++) 
     for ($j = 1 ; $j <=mysql_num_rows($query); $j++) 
      if ($table[$i] == $table[$j]) 
        $number++; 
if ($number > 2) 
    echo $number; 
+0

SQLクエリまたはPHPコアロジックを使用しますか – user1127214

+1

このテーブルはデータベースにありますか?もしそうなら、なぜコードで実行するのではなく、単にSQLを使用するのではないでしょうか? ( '名前の選択、名前によるテーブルグループからのカウント(*)など)。 – Chris

+0

O(n²)ランタイムの複雑さでループが実行される...それは悪いです。 O(n)線形時間で要素を数えることができます。 – knittl

答えて

1

あなたが直接SQL

SELECT `name`, COUNT(*) AS `count` 
FROM `table` 
GROUP BY `name` 

あなたがPHPにすべての行を転送する必要はありませんので、それは、より効率的になる中でこれを行うことができます。

+0

おそらく 'name'も選択したいと思うでしょう。そうでなければ良い見えます。 –

+0

@MДΓΓLLLLLL:うん、ありがとう! – knittl

+0

WHERE句で 'count'を使うことができますか? –

0
select count(1), name from table group by name; 

count(1) name 
2  ana 
2  john 
1  tom 
0

あなたはそれをクエリ側を行うことができます

ここ
select count(id), name from table group by name 
0
function check_number_of_times_elements_occur_in_array($a)//returns values of array as keys,associating values being their total occurences in the array 
{ 
$r=array(); 
foreach($a as $v) 
    ++$r[$v]; 
return $r; 
} 

必要に応じて返された配列にアクセスします。

関連する問題