我正在为WordPress编写一个反应插件,并尝试使用chart.js为过去7天每天的反应计数的管理员创建一个图表。用户反应记录在数据库的以下列中:postId
,reactedTo
和reactedDate
。示例行将为182
,Haha
和27 Jun 2019
。
我正在使用JavaScript生成具有相同格式的过去7天日期的数组,以为图表创建标签,还尝试通过AJAX在后端将其发送,以从数据库中获取每个日期记录的计数以数组格式。因此,例如,数据库包含以下数据:
postId reactedTo reactedDate
145 Like 22 Jun 2019
182 Haha 24 Jun 2019
182 Haha 27 Jun 2019
我正在使用JS中的以下代码生成过去7天的数组:
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var lastWeek = [];
for (var i = 0; i < 7; i++) {
var d = new Date();
d.setDate(d.getDate() - i);
lastWeek.push(d.getDate() + ' ' + months[d.getMonth()] + ' ' + d.getFullYear());
}
lastweek = lastWeek.reverse()
console.log(lastweek);
输出[“ 2019年6月21日”,“ 2019年6月22日”,“ 2019年6月23日”,“ 2019年6月24日”,“ 2019年6月25日”,“ 2019年6月26日”,“ 2019年6月27日”]
然后我将其通过AJAX发送到服务器,并在成功时生成图表。
jQuery.ajax({
url: ajaxurl,
dataType: 'text',
type: 'POST',
data: {
action: 'reactions_analytics',
dates: JSON.stringify(lastWeek)
},
success: function(response, textStatus, jqXhr) {
var reactionsChart = new Chart(ctx, {
type: 'line',
data: {
labels: lastWeek,
datasets: [{
data: response,
}
});
}
});
服务器中的response
应该是数据库中每个日期的数字数组。如果找不到日期,则为0。因此应该为[0,1,0,1,0,0,1]
。
这是我当前的PHP代码,用于在数据库中搜索并以相同顺序生成日期计数数组,但是它输出的是空数组[]
。
public function reactionsAnalytics() {
global $wpdb;
$tableName = $wpdb->prefix.'reactions';
$dates = json_encode($_POST['dates']);
$reacts = $wpdb->get_results("SELECT reactedDate, count(*) AS count FROM {$tableName} WHERE reactedDate IN ({$dates}) GROUP BY reactedDate", ARRAY_A);
$result = array();
foreach ($reacts as $react) {
$result[] = $react['count'];
}
wp_die(json_encode($result));
}
所以我认为我需要有关PHP的帮助。我的逻辑中不正确的是什么?可以做得更好吗?
基本上我正在尝试将其发送到服务器:["21 Jun 2019","22 Jun 2019","23 Jun 2019","24 Jun 2019","25 Jun 2019","26 Jun 2019","27 Jun 2019"]
在数据库[0,1,0,1,0,0,1]
中找到相同的数组,每个日期都有计数编号
答案 0 :(得分:0)
更改代码如下:
public function reactionsAnalytics() {
global $wpdb;
$tableName = $wpdb->prefix.'reactions';
$dates = str_replace("\\", "", $_POST['dates']);
$reacts = $wpdb->get_results("SELECT reactedDate, count(*) AS count FROM {$tableName} WHERE reactedDate IN ({$dates}) GROUP BY reactedDate", ARRAY_A);
$result = array();
foreach ($reacts as $react) {
$result[] = $react['count'];
}
wp_send_json_success($result);
}
按如下所示更改js代码:
jQuery.ajax({
url: ajaxurl,
dataType : "json",
type: 'POST',
data: {
action: 'reactions_analytics',
dates: lastWeek.reverse()
},
success: function(response, textStatus, jqXhr) {
if ( response.success === true ) {
var reactionsChart = new Chart(ctx, {
type: 'line',
data: {
labels: lastWeek,
datasets: [{
data: response.data,
}
});
} else {
// error
alert('error occured !');
}
}
}});
答案 1 :(得分:0)
问题出在$ dates变量中,因为它返回带有[]的数组,并且需要SQL查询(),所以我用str_replace
将[]替换为(),现在查询运行正常。