PHP中GROUP_CONCAT结合GROUP_BY查询数据无法正常显示问题
问题分析与解决方案
嘿,这个问题其实是个很容易犯的小疏忽,我帮你捋清楚:
核心错误原因
你在SQL查询里用GROUP_CONCAT(start_date) as data把每个月份对应的所有start_date合并成了一个名为data的字段,但在后续的循环中,你仍然尝试调用$row['start_date']——这个字段在查询结果集里已经不存在了,因为你已经把它聚合到data字段里了,这就是为什么只有month能正常显示的原因。
修正后的代码
把循环里的$row['start_date']换成$row['data']就可以了,我还帮你优化了输出格式,让结果更易读:
function events_calendar() { global $connection; mysqli_select_db($connection); $query = ("SELECT month, GROUP_CONCAT(start_date) as data FROM events GROUP BY month"); $result = $connection->query($query); $str = ""; while ($row = $result->fetch_assoc()) { echo "月份:" . $row['month']; // 这里改成调用别名data echo "<br>对应的活动日期:" . $row['data'] . "<br><br>"; } return $str; }
额外小技巧
如果觉得默认的逗号分隔不够直观,你可以自定义GROUP_CONCAT的分隔符,比如用竖线或者换行符:
SELECT month, GROUP_CONCAT(start_date SEPARATOR ' | ') as data FROM events GROUP BY month
内容的提问来源于stack exchange,提问作者pdas
相关产品推荐
相关产品推荐

