2012-10-01 49 views
0

我想使用DATE_ADD 2次的操作,但是它返回0行(雖然它應該返回行)MySQL的DATE_ADD 2次過程

下面是該過程

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不牽強,這是爲什麼? :(

+1

什麼是您的樣本數據和預期輸出?乍看起來這看起來不錯。 –

+0

同意lc,從句法上看似乎很好。這有什麼問題? –

+0

嗨,這裏有點大,但我希望所有的tbl_available數據與(如果有的話)相應的tbl_appointment數據和相應的tbl_client數據從1天開始。這工作,但現在我想從1周,這導致0行。但如果我使用相同的日期爲1天,它會給出行,所以我確定此過程必須返回行 – Nick

回答

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.appointmentdateav.avDays被更改爲與ap.appointmentdate相關或者也顯示沒有預約的行(假設這種行爲是因爲您的LEFT JOINtbl_appointment)我已經離開DayOfweek(dag) ...因爲您正在查看整整一週,所以這是多餘的

+0

這正是我想要的!謝謝,我忘了之間! :)離開Daysofweek的好主意,我沒想過:) – Nick

+0

不客氣。 –

+0

這個查詢中有一個錯誤,它只顯示匹配客戶端的記錄,但我也想要所有的avDays,沒有約會,因此沒有客戶端。我不知道如何使這個查詢外部連接 – Nick