0

プロシージャで Date_add を 2 回使用したいのですが、0 行を返します (行を返す必要があります)。

手順はこちら

 select av.*, ap.*,c.* from tbl_available av 
 left join tbl_appointment ap on av.avHours = ap.appointmenttime 
 and ap.calendarid = kalenderId 
 and ap.appointmentdate = DATE_ADD(dag, INTERVAL 6 DAY)
 left join tbl_client c on ap.clientid = c.clientid
 where av.avCalendarId = KalenderId 
 and av.avDays = DayOfweek(DATE_ADD(dag, INTERVAL 6 DAY)) 
 order by avHours;

date_add なしで動作します

前もって感謝します!

//編集

私が今持っているもの:

select av.*, ap.*,c.*, ab.absentid from tbl_available av 
left join tbl_appointment ap on av.avHours = ap.appointmenttime 
and ap.calendarid = kalenderId 
and ap.appointmentdate BETWEEN dag AND DATE_ADD(dag, INTERVAL 6 DAY)
and (av.avDays = DayOfweek(ap.appointmentdate) OR ap.appointmentdate IS NULL)
left join tbl_client c on ap.clientid = c.clientid
left join tbl_absent ab on av.avHours = ab.ababsent
and ab.abHoliday = dag
and ab.abCalendarID = kalenderId
where av.avCalendarId = kalenderId 
order by avDays,avHours;

しかし、ab.absentid が取得されません。なぜですか? :(

4

1 に答える 1

1

何が欲しいのか正確にはわかりませんが、1週間は、次のようにしてみてください。

select av.*, ap.*,c.* from tbl_available av 
left join tbl_appointment ap on av.avHours = ap.appointmenttime 
and ap.calendarid = kalenderId 
and ap.appointmentdate BETWEEN dag AND DATE_ADD(dag, INTERVAL 6 DAY)
and (av.avDays = DayOfweek(ap.appointmentdate) OR ap.appointmentdate IS NULL)
left join tbl_client c on ap.clientid = c.clientid
where av.avCalendarId = KalenderId 
order by avHours;

BETWEENの日付範囲を指定するために使用していますap.appointmentdate。は、予定のない行とav.avDays相関するか、行を表示するように変更されます( onがあるため、この動作を想定しています)。あなたが丸一週間を見ているので、これは冗長であるため、私は中断しました。ap.appointmentdateLEFT JOINtbl_appointmentDayOfweek(dag) ...

于 2012-10-01T02:54:22.803 に答える