gpt4 book ai didi

php - 如果使用 MySQL IN 语句从数组中找不到匹配项,则返回 0

转载 作者:行者123 更新时间:2023-11-29 15:50:01 24 4
gpt4 key购买 nike

我知道有很多类似的问题和答案,但在这种情况下它们都不起作用,因为我使用 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?

我尝试过在各种变体中使用COALESCEIFNULLSUM,但得到了相同的结果,但没有零。

这是 SQL Fiddle,您可以使用它:

http://sqlfiddle.com/#!9/ffbb98/5

谢谢!

最佳答案

您只需稍微更改应用程序 (PHP) 代码,而不是尝试使查询复杂化。获取数据库中可用日期的查询结果。现在,在 PHP 代码中,只需检查该日期的计数是否可用。如果是,则使用计数,否则设置为零。

// Change the SQL query result to an array with date as key, and count as value
$reacts_mod = array_combine(array_column($reacts, 'reactedDate'),
array_column($reacts, 'count'));

// Now prepare the $result
$result = array();
// Loop over input dates here
foreach ($dates as $dt) {

// If you have count obtained from the query result, then consider that else 0
if ( isset($reacts_mod[$dt]) ) {
$result[] = $reacts_mod[$dt];
} else {
$result[] = 0;
}

// Note: PHP7 code would be simply:
// $result[] = $reacts_mod[$dt] ?? 0;
}

关于php - 如果使用 MySQL IN 语句从数组中找不到匹配项,则返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56815708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com