从MySQL展示有可用车辆的品牌并显示对应车辆数量
解决方案:仅显示存在对应车辆的汽车品牌及总数
核心逻辑
通过MySQL的GROUP BY分组统计,自动过滤无对应车辆的品牌,同时计算每个品牌的车辆总数。
假设你的表结构(不符可自行调整)
假设你有一张cars表,结构如下:
CREATE TABLE cars ( id INT AUTO_INCREMENT PRIMARY KEY, brand VARCHAR(50) NOT NULL, -- 品牌名称,比如"BMW" model VARCHAR(50) NOT NULL, -- 车型 -- 其他字段如价格、年份等 );
修正后的MySQL查询语句
SELECT brand, COUNT(*) AS total_cars FROM cars GROUP BY brand;
GROUP BY brand:将同一品牌的车辆归为一组COUNT(*):统计每组的车辆数量,自动排除无车辆的品牌(无车辆的品牌不会被分组)
如果你的品牌存在单独的brands表(更规范的设计),比如:
CREATE TABLE brands ( id INT AUTO_INCREMENT PRIMARY KEY, brand_name VARCHAR(50) NOT NULL ); CREATE TABLE cars ( id INT AUTO_INCREMENT PRIMARY KEY, brand_id INT NOT NULL, model VARCHAR(50) NOT NULL, FOREIGN KEY (brand_id) REFERENCES brands(id) );
则查询语句改为:
SELECT b.brand_name, COUNT(c.id) AS total_cars FROM brands b INNER JOIN cars c ON b.id = c.brand_id GROUP BY b.id, b.brand_name;
INNER JOIN:仅保留有对应车辆的品牌,自动过滤无车辆的品牌
修正后的PHP代码示例(PDO版,更安全)
<?php // 数据库配置,替换为你的实际信息 $host = 'localhost'; $dbname = 'your_database_name'; $username = 'your_username'; $password = 'your_password'; try { // 建立PDO连接 $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 执行查询 $stmt = $pdo->query("SELECT brand, COUNT(*) AS total_cars FROM cars GROUP BY brand"); $brandData = $stmt->fetchAll(PDO::FETCH_ASSOC); // 输出结果 if (!empty($brandData)) { echo "<div class='brand-list'>"; foreach ($brandData as $item) { // 用htmlspecialchars防止XSS攻击 echo "<p>" . htmlspecialchars($item['brand']) . ":共 " . $item['total_cars'] . " 辆</p>"; } echo "</div>"; } else { echo "<p>暂无车辆数据</p>"; } } catch (PDOException $e) { echo "<p>数据库错误:" . $e->getMessage() . "</p>"; } ?>
关键注意事项
- 必须使用参数化查询(PDO/mysqli的预处理语句)避免SQL注入,上面的PDO示例已遵循此规范
- 输出品牌名称时用
htmlspecialchars()转义,防止XSS攻击 - 如果用mysqli扩展,可参考下面的示例:
<?php $host = 'localhost'; $dbname = 'your_database_name'; $username = 'your_username'; $password = 'your_password'; // 建立mysqli连接 $conn = new mysqli($host, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败:" . $conn->connect_error); } $conn->set_charset("utf8mb4"); // 执行查询 $result = $conn->query("SELECT brand, COUNT(*) AS total_cars FROM cars GROUP BY brand"); // 输出结果 if ($result->num_rows > 0) { echo "<div class='brand-list'>"; while ($row = $result->fetch_assoc()) { echo "<p>" . htmlspecialchars($row['brand']) . ":共 " . $row['total_cars'] . " 辆</p>"; } echo "</div>"; } else { echo "<p>暂无车辆数据</p>"; } $conn->close(); ?>
内容的提问来源于stack exchange,提问作者Kuvalda
相关产品推荐
相关产品推荐

