我有一个用PHP和MySQL编写的传输规划器,
要获取每天的任务规则,我使用以下查询:

SELECT  planning.*,
        planning_dagen.planning_id,
        planning_dagen.dagen,
        planning_dagen.data_import,
        routenummer_wijzigingen.routenummer AS temp_routenummer
FROM planning
LEFT JOIN planning_dagen
USING (planning_id)
LEFT JOIN routenummer_wijzigingen
USING (planning_id)
WHERE :datum >= planning.datum
AND :datum <= geldig_tot
AND (frequentie = 'dagelijks' AND dayofweek(:datum) = planning_dagen.dagen
OR (frequentie = 'eenmalig' AND date(:datum) = planning.datum)
OR (frequentie = 'wekelijks' AND 0 = (abs(datediff(:datum, planning.datum)) % 7))
OR (frequentie = 'twee-wekelijks' AND 0 = (abs(datediff(:datum, planning.datum)) % 14))
OR (frequentie = 'maandelijks'
AND ceil(dayofmonth(:datum)/7) = ceil(dayofmonth(planning.datum)/7)
AND dayofweek(:datum) = dayofweek(planning.datum)))
AND dayofweek(:datum) <> '1'
AND dayofweek(:datum) <> '7'

planning表中有一个名为routenummer(routenumber)的列,该列在大多数情况下(标准routenumber)使用。
但正如您所见,我还有一个routenummer_wijzigingen表,用于为某一天的任务提供不同的routenumber。
例如,我有一个每周二和周三返回的任务,它的routenumber为10。但在周二,我需要routenumber 9完成这项任务。
因此,我在2015-02-03表中插入一个规则,该规则包含以下列:
routenummer_wijzigingen_id
planning_id
routenummer
datum

因此,当日期被选择并且日期和规划ID存在于routenummer_wijzigingen表中时,它必须从routenummer_wijzigingen表而不是routenummer_wijzigingen表中获取RoutNoSn.
我怎样才能做到这一点?

最佳答案

您应该使用routenummer_wijzigingen表(包括datum)修改连接条件。然后您应该在CASE子句中使用SELECT来决定选择哪个routenummer

SELECT  planning.*,
    planning_dagen.planning_id,
    planning_dagen.dagen,
    planning_dagen.data_import,
    CASE
        WHEN routenummer_wijzigingen.routenummer is not NULL
            THEN routenummer_wijzigingen.routenummer
        ELSE planning.routenummer
    END AS temp_routenummer
FROM planning
...
LEFT JOIN routenummer_wijzigingen rw on
    planning.planning_id=rw.planning_id and rw.datum=...

10-06 11:50