0
SELECT CONCAT(`date`,',',`viewcount`) 
FROM `stat` 
WHERE `stat`.`id` = 1 
  AND `channelstat`.`date` BETWEEN (SELECT DATE_SUB(NOW(), INTERVAL 90 DAY)) AND NOW()

该查询运行良好,并以 CSV 格式为我提供了过去 2 天的结果。

我想在 MySQL 中生成整个 csv 文件。我试图编写我的命令来做到这一点。当我尝试 GROUP_CONCAT 时效果不佳。现在我从 8 月 4 日以下的日期得到了行。我很惊讶,因为第一次查询是从今天开始的。

SELECT GROUP_CONCAT(CONCAT(`date`,',',`viewcount`) SEPARATOR '\r\n') 
FROM `stat` 
WHERE `stat`.`id` = 1 
  AND `stat`.`date` BETWEEN (SELECT DATE_SUB(NOW(), INTERVAL 90 DAY)) AND NOW()

在第二个查询中,最后两行是完全无效的

2013-08-04,798
2013-08-

有人请告诉我为什么它不起作用。当行从今天到过去 4 个月时,为什么最后一行是不同的。

第二个查询有错误,如

无效的组连接或我遗漏了一些东西。

4

2 回答 2

1

我认为您的结果会被 GROUP_CONCAT 截断。

正如GROUP_CONCAT的文档所说:

结果被截断为由 group_concat_max_len 系统变量给出的最大长度,其默认值为 1024。该值可以设置得更高,尽管返回值的有效最大长度受 max_allowed_pa​​cket 值的限制。在运行时更改 group_concat_max_len 值的语法如下,其中 val 是无符号整数:

SET [GLOBAL | SESSION] group_concat_max_len = val;
于 2013-08-30T07:59:30.847 回答
0

请试一试:

$res=$mysqli->query("SELECT id,GROUP_CONCAT(client_id) as clients FROM services WHERE id = 3 GROUP BY id");
$row = $res->fetch_array(MYSQLI_ASSOC);
$result = explode(',', $row['clients']); // $row['clients'] contains string 5,6,7
$res->free();
于 2013-08-30T07:29:30.743 回答