计算每个字符串在 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>';
...将显示如下:
- 猫
- 鱼
- 鸟
- 猫
- 蛇
- 鸟
- 猫
- 猫
- 鱼
- 鱼
- 鱼
- 鱼
- 鱼
- 鱼
- 鱼
- 蛇
- 猫
但我真正需要的是让它不返回重复项,并且在每个旁边都有一个计数。所以它应该这样显示:
- 猫 (5)
- 鱼 (8)
- 鸟 (2)
- 蛇 (2)
提前致谢。
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 完全如您所愿,您可以循环显示结果。
我有一个数据库 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>';
...将显示如下:
- 猫
- 鱼
- 鸟
- 猫
- 蛇
- 鸟
- 猫
- 猫
- 鱼
- 鱼
- 鱼
- 鱼
- 鱼
- 鱼
- 鱼
- 蛇
- 猫
但我真正需要的是让它不返回重复项,并且在每个旁边都有一个计数。所以它应该这样显示:
- 猫 (5)
- 鱼 (8)
- 鸟 (2)
- 蛇 (2)
提前致谢。
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 完全如您所愿,您可以循环显示结果。