我知道有很多类似的问题和答案,但在这种情况下,它们都不起作用,因为我使用IN语句从数组中获取匹配项,而我的日期varchar由于其格式而采用数据类型。这里是:
我正在尝试检查数据库中是否存在数组项,并将每个项的计数作为一个数组。我的 SQL 查询运行良好并获得结果,但唯一的问题是我希望它为数据库中不存在的数组项返回 0 而不是跳过它。
例如,这里是我的数据库表:
postId reactedTo reactedDate
126 Like 22 Jun 2019
172 Haha 24 Jun 2019
172 Wow 27 Jun 2019
132 Like 27 Jun 2019
这是我运行 SQL 查询并将结果作为数组获取的函数
public function reactionsAnalytics() {
global $wpdb;
$tableName = $wpdb->prefix.'reactions';
$dates = $this->getLastNDays(7); //array('22 Jun 2019', '23 Jun 2019', ... ,'28 Jun 2019');
$reacts = $wpdb->get_results("
SELECT reactedDate, count(*) AS count
FROM {$tableName}
WHERE reactedDate IN ('".implode("','", $dates)."')
GROUP
BY reactedDate
", ARRAY_A);
$result = array();
foreach ($reacts as $react) {
$result[] = $react['count'];
}
wp_die(json_encode($result));
}
这个函数的预期输出是 ["1","0","1","0","0","2","0"],但我得到 ["1","1" ,"2"]。如何防止 $reacts 查询跳过未找到的项目并使其输出 0?
我试过使用COALESCE,IFNULL并SUM有各种变化,但得到了相同的结果,但没有零。
这是 SQL Fiddle,您可以使用它:
http://sqlfiddle.com/#!9/ffbb98/5
呼啦一阵风