计算每个字符串在 foreach 循环中出现的次数

Count number of time each string appears in foreach loop

我有一个数据库 table 有一些行...

...option_name 列中经常会有多次重复的项目。如您所见,Fish、Cat、Bird 和 Snake 的实例不止一个。这是预料之中的,很好。

所以我像这样在前端返回这些行...

$poll_id    = 211;
$poll_table = $wpdb->prefix . "the_votes";
$poll_items = $wpdb->get_results("
    SELECT * 
    FROM $poll_table
    WHERE poll_id = $poll_id
");
echo '<ul>';
foreach ( $poll_items as $poll_item ) {

    echo '<li>' . $poll_item->option_name . '</li>';

}
echo '</ul>';

...将显示如下:

但我真正需要的是让它不返回重复项,并且在每个旁边都有一个计数。所以它应该这样显示:

提前致谢。

SELECT * 从 $poll_table WHERE poll_id = $poll_id 分组依据poll_id

该方法用于过滤重复值

你应该使用group by:

select option_name, count(id) as count from polls group by option_name;

您的代码应如下所示:

$poll_id    = 211
$poll_table = $wpdb->prefix . "the_votes";
$poll_items = $wpdb->get_results("
    SELECT count(id) as count, option_name 
    FROM $poll_table
    WHERE poll_id = $poll_id
    GROUP BY option_name
");
echo '<ul>';
foreach ( $poll_items as $poll_item ) {

    echo '<li>' . $poll_item->option_name . '(' . $poll_item->count . ')</li>';

}
echo '</ul>';

在SQL,SELECTcolumn_name,计数(column_name) 从 $poll_table WHERE poll_id = $poll_id 按 poll_id 分组。您可以过滤并获取带有计数的 ID。您可以使用列名来代替 *。

在 jquery 中,您可以使用此 $.unique(arr) 获取唯一元素,并且可以 递增每个数组值 并获取每个值的准确计数。

使用 MySQL 查询本身:

SELECT *, COUNT(option_name) AS option_count FROM $table WHERE poll_id = $poll_id GROUP BY option_name

这将 return 完全如您所愿,您可以循环显示结果。