Php MySQL分组/合并数据

Php MySQL分组/合并数据,php,mysql,Php,Mysql,我正在努力找到一种通过SELECT查询合并数据的方法。该表如下所示: sku condition make model derivative height length depth ------------------------------------------------------------------------------------------- 123 new ford test

我正在努力找到一种通过SELECT查询合并数据的方法。该表如下所示:

sku     condition   make      model       derivative    height    length     depth
-------------------------------------------------------------------------------------------
123     new         ford      test        212           1.28      9.0       
234     new         ford      test        212
345     new         ford      test        212                                4.9
456     new         bmw       awesome                   3.33      3.33
789     new         bmw       cool        123           2.23                 9.89
987     new         bmw       cool        123                     1.99
...            ...              ...           ...           ...         ...         ...
我需要做的是根据最好的可用数据进行分组。我试图按每一列进行分组,但意外的结果发生了

这就是我希望回报的:

sku     condition   make      model       derivative    height    length     depth
-------------------------------------------------------------------------------------------
123     new         ford      test        212           1.28      9.0        4.9
234     new         ford      test        212           1.28      9.0        4.9
345     new         ford      test        212           1.28      9.0        4.9
456     new         bmw       awesome                   3.33      3.33
789     new         bmw       cool        123           2.23      1.99       9.89
987     new         bmw       cool        123           2.23      1.99       9.89
...            ...              ...           ...           ...         ...         ...
从上面可以看到,SKU字段是唯一的,但所有其他数据都是基于其他行填充的。这些条件基于条件、品牌、模型、衍生产品,但这些可能在未来发生变化。列名也会定期更改,因此它需要是动态的,而无需修改查询以添加新列

如果有具有相同条件、品牌、型号、导数但高度、长度或深度不同的行,则应保留该值

对不起,我解释得不够深入

感谢您的帮助

多谢各位

SELECT sku, condition, make, model, derivative,
       IFNULL(t1.height, t2.height) height, 
       IFNULL(t1.length, t2.length) length,
       IFNULL(t1.depth, t2.depth) depth
FROM mytable t1
JOIN (SELECT condition, make, model, derivative,
             MAX(height) height, MAX(length) length, MAX(depth) depth
      FROM mytable
      GROUP BY condition, make, model, derivative) t2
USING (condition, make, model, derivative)

当您添加新列时,这不会自动更新。要做到这一点,您必须使用information_schema表编写动态SQL,以获取所有列名。现在,您已经看到了查询的一般结构,我希望您能够自己计算出这一部分。

您需要不同的高度、深度和长度组合,以便按列分组,rt

所以,如果有两个不同的值可用于“长度”,但仅用于“高度”和“深度”。你将如何处理这件事。在这种情况下,下面的查询将生成两个结果

    SELECT M.SKU, M.Condition, M.Make, M.Model, M.Derivative, HGHT.HEIGHT, HGHT.LENGTH, HGHT.DEPTH
FROM
MY_TBL AS M 
INNER JOIN 
(
    SELECT Condition, Make, Model, Derivative , MAX(height) AS HEIGHT, MAX(LENGTH) AS LENGTH, MAX(DEPTH) AS DEPTH
    FROM MY_TBL
    GROUP BY Condition, Make, Model, Derivative 
) AS HGHT
ON M.CONDITION = HGHT.CONDITION
AND M.MAKE = HGHT.MAKE
AND M.MODEL = HGHT.MODEL
AND M.DERIVATIVE = HGHT.DERIVATIVE

建议我现在不能测试:按条件分组、制作、建模、衍生,并使用“组凹”作为高度,组凹长度作为长度,…-GROUP_CONCAT有几个论点,所以摆弄它们可能会得到你需要的东西。但是,如果你能保证每个组只填写一次这些字段,这就行了。我不认为他要求的是最大值,他还说如果可用,他需要其他高度值。如果为空,则只替换空值。如果有多个高度,我必须选择一个来替换-我使用最大值。对不起,我忘了提到它需要是一个选择查询,没有更新可以发生。抱歉,我没有添加。它将选择所述列的最高值。始终需要与以前相同数量的行,但每个列中的数据都需要根据条件、品牌、模型和衍生列使用尽可能最好的可用数据填充。如果存在重复数据,例如两行条件相同、Make、Model、Deriviatve,则应获得所述列的最高值,即最高高度或长度等@verheesj您的问题是,如果已经有值,则应保留该值。现在你说它应该得到最高值?只有当所说的列为空时,它才应该得到最高值。如果它已经包含一个值,则不应更改该值。如果列恰好是空的,那么它应该根据Make、Model、Derivative等获得另一行的最高值。我认为我们完全混淆了。您需要告诉我们您到底需要什么,并向我们提供您期望的结果,其中包括您期望处理的所有场景