Php 使用条件合并mysql数据库表中的两行

Php 使用条件合并mysql数据库表中的两行,php,mysql,Php,Mysql,我在mysql数据库中有一个表,在该表中我执行一些查询以显示来自该表的结果。但我想合并表中的某一行 id | benefit | plan_day | price ------------------------------- 1 | Free Pick up | 100 | 540 2 | Free Tea | 100 | 540 这是我的表的结构和示例值 id | benefit | plan_day | price ------------------------------- 1 |

我在mysql数据库中有一个表,在该表中我执行一些查询以显示来自该表的结果。但我想合并表中的某一行

id | benefit | plan_day | price
-------------------------------
1 | Free Pick up | 100 | 540
2 | Free Tea | 100 | 540
这是我的表的结构和示例值

id | benefit | plan_day | price
-------------------------------
1 | Free Pick up | 100 | 540
2 | Free Tea | 100 | 540
该示例在“计划日”中具有相同的价值,但在“效益”中具有不同的价值

这是我的第二个例子,有不同的计划和福利

我想知道的是,我想合并两行,如果计划日的值相同,我只想合并收益,价格不是总和,但如果计划日的值不同,我想合并收益和计划日本身,我想合计价格

这是我要显示的结果:

如果计划日具有相同的值,则为条件

Free Pick up, Free Tea | 100 | 540
如果计划日具有不同的值,则为条件

Free Pick up, Free Tea | 110, 100 | 1080
这就是我一直在做的,但不是成功

SELECT GROUP_CONCAT(benefit SEPARATOR ',') AS benefit, GROUP_CONCAT(plan_day SEPARATOR ',') AS plan_day, SUM(price) as price
FROM special_offer
有人能帮我解决这个问题吗?谢谢。

只需在查询中添加DISTINCT子句即可:

SELECT
  GROUP_CONCAT(DISTINCT benefit SEPARATOR ',') AS benefit,
  GROUP_CONCAT(DISTINCT plan_day SEPARATOR ',') AS plan_day,
  SUM(price) as price
FROM
  special_offer
我想你想要这个:

select plan_day,
    group_concat(benefit order by id separator ',') benefits,
    max(price) price
from t
group by plan_day
having count(*) > 1

union all

select *
from (
    select group_concat(t1.plan_day order by t1.id separator ',') plan_day,
        group_concat(t1.benefit order by t1.id separator ','),
        sum(t1.price) price
    from t t1
    join (
        select plan_day
        from t
        group by plan_day
        having count(*) = 1
        ) t2 on t1.plan_day = t2.plan_day
    )
where plan_day is not null;
对于此数据:

(1, 'Free Pick up', 110, 540 ),
(2, 'Free Tea',     100, 540 );
产生:

110,100     Free Pick up,Free Tea   1080
100         Free Pick up,Free Tea   540
和数据

(1, 'Free Pick up', 100, 540 ),
(2, 'Free Tea',     100, 540 );
产生:

110,100     Free Pick up,Free Tea   1080
100         Free Pick up,Free Tea   540

很抱歉,我只是在查询和结果部分编辑了我的问题。我将SUMprice更改为price当这四行同时出现时会发生什么?如果计划日相同,但价格不同,会发生什么?我只想展示一个@哪一个?请澄清在这种情况下它将如何工作?你是什么意思@GurV我想我已经清楚地解释了我的问题。请看下面我的答案当计划日不同时,它会返回空的。@Antonio-不,它不会。请参阅第一个示例输出。是否还有其他简单查询?不是像这样的工会?是你的要求,不是。