当前位置:首页 > PHP

php 实现商品筛选

2026-03-13 09:09:35PHP

实现商品筛选功能

在PHP中实现商品筛选功能通常涉及数据库查询、条件构建和前端交互。以下是常见的实现方法:

数据库表设计

商品表(products)和筛选属性表(product_attributes)是基础结构:

CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    price DECIMAL(10,2),
    category_id INT
);

CREATE TABLE product_attributes (
    id INT PRIMARY KEY AUTO_INCREMENT,
    product_id INT,
    attribute_name VARCHAR(100),
    attribute_value VARCHAR(100)
);

构建筛选查询

使用动态SQL构建筛选条件:

$conditions = [];
$params = [];

if(isset($_GET['category'])) {
    $conditions[] = "category_id = :category";
    $params[':category'] = (int)$_GET['category'];
}

if(isset($_GET['min_price'])) {
    $conditions[] = "price >= :min_price";
    $params[':min_price'] = (float)$_GET['min_price'];
}

$where = !empty($conditions) ? 'WHERE ' . implode(' AND ', $conditions) : '';

$sql = "SELECT * FROM products $where";
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);

多属性筛选实现

对于多属性筛选(如颜色、尺寸等):

if(isset($_GET['attributes'])) {
    $attributeConditions = [];
    foreach($_GET['attributes'] as $attr => $values) {
        $placeholders = [];
        foreach($values as $i => $value) {
            $param = ":attr_{$attr}_{$i}";
            $placeholders[] = $param;
            $params[$param] = $value;
        }
        $attributeConditions[] = "(attribute_name = '{$attr}' AND attribute_value IN (".implode(',', $placeholders)."))";
    }

    if(!empty($attributeConditions)) {
        $sql .= " AND id IN (
            SELECT product_id FROM product_attributes 
            WHERE ".implode(' OR ', $attributeConditions)."
            GROUP BY product_id
            HAVING COUNT(DISTINCT attribute_name) = ".count($_GET['attributes'])."
        )";
    }
}

前端筛选表单

创建HTML筛选表单:

<form method="GET" action="products.php">
    <div>
        <label>价格范围:</label>
        <input type="number" name="min_price" placeholder="最低价">
        <input type="number" name="max_price" placeholder="最高价">
    </div>

    <div>
        <label>颜色:</label>
        <input type="checkbox" name="attributes[color][]" value="red"> 红色
        <input type="checkbox" name="attributes[color][]" value="blue"> 蓝色
    </div>

    <div>
        <label>尺寸:</label>
        <input type="checkbox" name="attributes[size][]" value="S"> S
        <input type="checkbox" name="attributes[size][]" value="M"> M
    </div>

    <button type="submit">筛选</button>
</form>

性能优化建议

使用索引加速查询:

php 实现商品筛选

ALTER TABLE products ADD INDEX idx_category_price (category_id, price);
ALTER TABLE product_attributes ADD INDEX idx_product_attr (product_id, attribute_name, attribute_value);

对于大型电商系统,可以考虑使用Elasticsearch等专业搜索引擎实现更复杂的商品筛选功能。缓存常用筛选结果也能显著提升性能。

标签: 商品php
分享给朋友:

相关文章

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…