PHP中SQL GROUP BY无法显示动物列名称的问题求助
问题:PHP搜索筛选功能中复选框选项缺失动物名称
我正在尝试用PHP开发搜索筛选功能,需要从数据库提取分类作为复选框选项。期望输出格式为「动物编码 动物名称 - 数量」(如100 Cats - 2),但执行以下代码后,仅显示编码和数量,缺失动物名称。
我的代码
$query = "SELECT animalcode, COUNT(*) as num_items FROM dbposts GROUP BY animal"; $statement = $connect->prepare($query); $statement->execute(); $result = $statement->fetchAll(); foreach($result as $row) { echo $row['animalcode']; echo $row['animal']; echo " - "; echo $row['num_items']; echo "<br>"; }
当前输出
100 - 2 102 - 2 103 - 1 104 - 3 105 - 1 108 - 1
数据库结构
CREATE TABLE IF NOT EXISTS `dbposts` ( `id` int(6) unsigned NOT NULL, `animalcode` varchar(200) NOT NULL, `animals` varchar(200) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; INSERT INTO `dbposts` (`id`, `animalcode`, `animals`) VALUES ('1', '100', 'Cats'), ('2', '101', 'Dogs'), ('3', '100', 'Cats'), ('4', '103', 'Tiger'), ('5', '104', 'Fox'), ('6', '105', 'Lion'), ('7', '101', 'Dogs'), ('8', '104', 'Fox'), ('9', '108', 'Snake'), ('10', '104', 'Fox');
解决方案
问题出在两个核心错误,修改后即可得到期望结果:
1. 修正SQL查询语句
原查询没有选择animals字段,且GROUP BY的字段名错误(数据库中是animals而非animal),同时规范写法需要将所有非聚合字段加入GROUP BY:
$query = "SELECT animalcode, animals, COUNT(*) as num_items FROM dbposts GROUP BY animalcode, animals";
2. 修正PHP输出逻辑
原代码中错误使用了不存在的$row['animal']字段,应改为数据库中实际的animals字段,同时添加空格让格式更符合预期:
foreach($result as $row) { echo $row['animalcode']; echo " " . $row['animals']; echo " - "; echo $row['num_items']; echo "<br>"; }
修改后运行,即可得到如下正确输出:
100 Cats - 2 101 Dogs - 2 103 Tiger - 1 104 Fox - 3 105 Lion - 1 108 Snake - 1
内容的提问来源于stack exchange,提问作者AbleInfosoft Gmail
相关产品推荐
相关产品推荐

