首页 > 解决方案 > MySQL - 多个 TABLES 上的多个 GROUP_CONCAT(服务器错误)

问题描述

我有这样的表和查询: SQLFIDDLE

SELECT P.*, 
       GROUP_CONCAT(DISTINCT `trait_name` ORDER BY `trait_id` SEPARATOR ', ') AS traits,
       GROUP_CONCAT(DISTINCT `filter_name` ORDER BY `filter_id` SEPARATOR ', ') AS filters
FROM `products` P 
NATURAL JOIN 
       `personality_traits` 
NATURAL JOIN 
       `product_to_traits` 
NATURAL JOIN 
       `filters` 
NATURAL JOIN 
       `product_to_filters` 
GROUP BY P.`product_name`

我想选择所有产品并显示给定产品所属的所有特征和过滤器(特征和过滤器在单独的表中)。

这个解决方案在我的本地主机上运行得很好,但不幸的是在目标服务器上不行。

我还能怎么写这个查询?

编辑:
当我删除其中一个 GROUP_CONCAT(以及相应的 NATURAL JOIN)时,我的服务器可以处理这个问题。添加第二个 GROUP_CONCAT 时,服务器正在加载我的查询一段时间,最后抛出“500 服务器遇到内部错误或配置错误,无法完成您的请求。” . 我有 OVH 的基本(个人)托管计划

当尝试直接在 phpmyadmin 中运行查询时,我收到: phpmyadmin 中的错误 谢谢!

标签: mysql

解决方案


您的代码可能会失败,因为它不是有效的聚合查询:select子句必须与group by子句一致。

制作product_idtable 的主键products。然后,只需将GROUP BY子句更改为:

GROUP BY p.`product_id`

推荐阅读