如何用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字段(客户下单时的浏览器标识),通过关键词匹配判断设备类型,你可以根据需要补充更多规则(比如加入鸿蒙、平板等识别)。
注意事项
- 确保你的PrestaShop表前缀是
ps_,如果安装时修改了前缀,记得把所有ps_替换成你的实际前缀。 - 如果需要提取顶级商品类别而不是直接关联的分类,需要修改
ps_category的关联逻辑(比如递归查询父分类直到顶级)。 http_user_agent字段可能为空,此时设备类型会显示“未知”,你可以根据业务需求调整默认值。
内容的提问来源于stack exchange,提问作者RMJJ
相关产品推荐
相关产品推荐

