You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MySQL提取PrestaShop 1.6中每位客户的首单详情?

提取PrestaShop 1.6客户首笔订单信息的MySQL方案

嘿,刚好我对PrestaShop 1.6的数据库结构比较熟,这就给你写好提取每位客户首笔订单信息的MySQL查询,顺便把每个字段的逻辑都讲清楚,方便你按需调整!

完整查询语句

SELECT
    c.id_customer AS 客户ID,
    g.name AS 性别,
    COALESCE(TIMESTAMPDIFF(YEAR, c.birth_date, CURDATE()), '未填写') AS 年龄,
    o.date_add AS 订单日期,
    ROUND(o.total_paid_tax_incl, 2) AS 消费总额,
    GROUP_CONCAT(DISTINCT cat.name SEPARATOR ', ') AS 商品类别,
    CASE WHEN c.newsletter = 1 THEN '是' ELSE '否' END AS 是否订阅通讯,
    CASE WHEN o.total_tax > 0 THEN '是' ELSE '否' END AS 是否使用增值税,
    CASE WHEN EXISTS (SELECT 1 FROM ps_order_cart_rule ocr WHERE ocr.id_order = o.id_order) THEN '是' ELSE '否' END AS 是否使用优惠券,
    p.name AS 支付方式,
    -- 解析User Agent判断设备/操作系统
    CASE
        WHEN o.http_user_agent LIKE '%Mobile%' OR o.http_user_agent LIKE '%Android%' OR o.http_user_agent LIKE '%iPhone%' OR o.http_user_agent LIKE '%iPad%' THEN '移动设备'
        WHEN o.http_user_agent LIKE '%Windows%' THEN 'Windows桌面'
        WHEN o.http_user_agent LIKE '%Mac OS%' THEN 'Mac桌面'
        WHEN o.http_user_agent LIKE '%Linux%' THEN 'Linux桌面'
        ELSE '未知'
    END AS 设备或操作系统
FROM
    ps_customer c
JOIN ps_gender g ON c.id_gender = g.id_gender
JOIN ps_orders o ON c.id_customer = o.id_customer
JOIN ps_order_detail od ON o.id_order = od.id_order
JOIN ps_product pr ON od.id_product = pr.id_product
JOIN ps_category_product cp ON pr.id_product = cp.id_product
JOIN ps_category cat ON cp.id_category = cat.id_category
JOIN ps_payment p ON o.id_payment = p.id_payment
WHERE
    o.id_order IN (
        SELECT MIN(id_order)
        FROM ps_orders
        GROUP BY id_customer
    )
GROUP BY
    c.id_customer, g.name, c.birth_date, o.date_add, o.total_paid_tax_incl, c.newsletter, o.total_tax, p.name, o.http_user_agent
ORDER BY
    o.date_add ASC;

关键逻辑拆解

  • 首单筛选:通过子查询SELECT MIN(id_order) FROM ps_orders GROUP BY id_customer拿到每个客户的第一笔订单ID,确保只返回首次下单的数据。
  • 性别转换:关联ps_gender表,把客户表的id_gender数字ID转换成实际的性别名称(比如“男”/“女”,具体显示取决于你的店铺语言设置)。
  • 年龄计算:用TIMESTAMPDIFF函数从客户生日计算当前年龄,COALESCE用来处理未填写生日的情况,直接显示“未填写”。
  • 商品类别合并:一个订单可能包含多品类商品,用GROUP_CONCAT把所有关联类别合并成逗号分隔的字符串,DISTINCT避免重复显示同一类别。
  • 增值税判断:通过订单的total_tax字段是否大于0来判断是否产生了增值税,如果你的店铺有特殊免税规则,可以自行调整这个判断条件。
  • 优惠券检测:通过检查ps_order_cart_rule表是否有该订单的关联记录,判断客户是否使用了优惠券。
  • 设备识别:解析订单表的http_user_agent字段(客户下单时的浏览器标识),通过关键词匹配判断设备类型,你可以根据需要补充更多规则(比如加入鸿蒙、平板等识别)。

注意事项

  1. 确保你的PrestaShop表前缀是ps_,如果安装时修改了前缀,记得把所有ps_替换成你的实际前缀。
  2. 如果需要提取顶级商品类别而不是直接关联的分类,需要修改ps_category的关联逻辑(比如递归查询父分类直到顶级)。
  3. http_user_agent字段可能为空,此时设备类型会显示“未知”,你可以根据业务需求调整默认值。

内容的提问来源于stack exchange,提问作者RMJJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:30:59