麻烦将两个sql查询合并为一个

时间:2010-12-06 23:36:10

标签: php mysql pdo

我有一个表格,其中包含个别会员记录的截止日期。每行包含四个字段:

 ID     |    Next_Due    |    Next_Due_Missed    |    Amount
=============================================================
  123   |   2010-12-05   |        NULL           |    41.32
  456   |   2010-12-10   |       2010-12-05      |    21.44
  789   |   2010-12-20   |       2010-12-10      |    39.99

ID是每个MEMBER的唯一ID

下一个到期 - 是他们定期订阅期的下一个到期日

仅在收集第一轮订阅付款时出错时才会填充Next_Due_Missed。

金额是订阅所拥有的金额。

我的目标是创建一个sql查询,检查next_due_missed是否存在且不为null。如果是,请将该值用作'$ date'。如果没有,请设置$ date = next_due的值

这很容易做到,除了我的结果在正常情况下按Next_Due分组,如果我结合我目前的方式,将省略next_due_missed。

每个付款期限,可能有600多条记录,其next_due等于所需日期(10-15等于next_due_missed)。

我目前的查询是:

$stmt = $db->prepare("SELECT next_due, next_due_missed FROM table_name WHERE (next_due > CURDATE() OR next_due_missed > CURDATE()) GROUP BY next_due ASC");

但这仅返回next_due的结果。省略GROUP BY子句会返回数百个结果(而我需要在此阶段进行分组)。

同样在稍后,我需要打破这些个人记录,并根据'next_due'和'next_due_missed'值创建付款记录。

我缺少什么想法?

1 个答案:

答案 0 :(得分:1)

除了获取DISTINCT值之外,我不确定您的GROUP BY的用途,但如果您提供了部分查询,请将其保留:

SELECT coalesce(next_due_missed, next_due) as EffectiveNextDue
FROM table_name 
WHERE coalesce(next_due_missed, next_due) > CURDATE()
GROUP BY coalesce(next_due_missed, next_due)