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;
4

5 に答える 5

1

これはSQLで直接行うことができます

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

すべての行を PHP に転送する必要がないため、より効率的です。

于 2012-04-04T16:03:12.300 に答える
0

ここで、最小のID、名前、およびそれが存在する回数を取得します。

select min(id),name,count(*) as cnt from table group by name

php配列の場合:

$newarray= array_count_values ( $table );

http://php.net/manual/en/function.array-count-values.phpを参照してください

于 2012-04-04T16:07:29.693 に答える
0

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

select count(id), name from table group by name
于 2012-04-04T16:04:22.003 に答える
0
select count(1), name from table group by name;

count(1) name
2        ana
2        john
1        tom
于 2012-04-04T16:03:15.597 に答える
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;
}

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

于 2012-04-07T10:51:09.000 に答える