GROUP_CONCAT显示PHP中的各个列

时间:2018-04-06 17:16:21

标签: php sql mysqli

如何使用GROUP_CONCAT在php中显示各个列?

在我的下面的代码中,我使用GROUP_CONCAT将“start_date”,“title”和“location”全部分组为“data”。我想将每个定义为php变量,而不仅仅是“数据”。这可能吗?

function events_calendar() {
 global $connection;
 mysqli_select_db($connection);
 $query = ("SELECT month, GROUP_CONCAT(start_date, title, location) as data FROM events GROUP BY month");
 $result = $connection->query($query);
 $str = "";
 while ($row = $result->fetch_assoc()) {
     $data = $row['data'];
     $str .= $data
 }
 return $str;
}

我为每列使用多个GROUP_CONCAT的问题是我的数据没有正确输出。我想让它像这样出来,以便在每个月组下对适当的数据进行分类:

month: start_date 1, location 1, title 1    start_date 2, location 2, title 2
next month: start_date 3, location 3, title 3
next month: start_date 4, location 4, title 4

不喜欢这样:

month: start_date 1, start_date 2   location 1, location 2   title 1, title 2

1 个答案:

答案 0 :(得分:2)

您需要在列之间放置一个分隔符,并使其与组中行之间的分隔符不同:

GROUP_CONCAT(CONCAT_WS(', ', start_date, location, title) SEPARATOR '\t') AS data

这将在每列之间添加逗号,并在每行的数据之间添加TAB。

然后在PHP中,您可以使用$data = explode('\t', $row['data'])获取每行数据的数组,并使用explode(', ', $data[$i])获取其中的每一列。