如何使用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
答案 0 :(得分:2)
您需要在列之间放置一个分隔符,并使其与组中行之间的分隔符不同:
GROUP_CONCAT(CONCAT_WS(', ', start_date, location, title) SEPARATOR '\t') AS data
这将在每列之间添加逗号,并在每行的数据之间添加TAB。
然后在PHP中,您可以使用$data = explode('\t', $row['data'])
获取每行数据的数组,并使用explode(', ', $data[$i])
获取其中的每一列。