2012-12-26 50 views
1

這是我的select語句。它有什麼作用?爲沒有找到任何內容的select語句定義返回參數

  • 檢查是否有數據庫中已有的約會在指定日期的
  • 檢查,如果用戶在特定時間的工作。

With mysql_num_rows($result)我檢查是否有任何行。如果返回0,則可以添加約會,如果返回其他內容(數據庫中已有約會),則會阻止該約會。

該聲明適用於第1點。如果已有約會,則返回1或更多。但是,當選定日期超出用戶的工作小時範圍時,它也返回0.

問題:我可以在聲明中添加什麼以獲取返回的行(mysql_num_rows返回1或更多),何時用戶在該特定時間不工作

工作小時範圍示例:08:00:00 to 17:00:00

select * 
from ios_appointments a join ios_workinghours h using(workerid_fk) 
where workerid_fk = 1 
AND h.start <= '19:57:20' AND h.end >= '20:57:20' 
AND ( 
    a.start BETWEEN '2012-12-24 19:57:20' AND '2012-12-24 20:57:20' 
    OR a.end BETWEEN '2012-12-24 19:57:20' AND '2012-12-24 20:57:20' 
    OR (a.start < '2012-12-24 19:57:20' AND a.end > '2012-12-24 20:57:20') 
) 
+0

使用'case'來驗證是否返回任意數量的行。 – bonCodigo

+0

一段時間以來,Mysql一直支持[存儲過程](http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html)。 – Joe

+0

爲什麼這個標記爲pl/sql? –

回答

0

你可以返回空值的一行:

select * 
from ios_appointments a join ios_workinghours h using(workerid_fk) 
where workerid_fk = 1 
AND h.start <= '19:57:20' AND h.end >= '20:57:20' 
AND ( 
    a.start BETWEEN '2012-12-24 19:57:20' AND '2012-12-24 20:57:20' 
    OR a.end BETWEEN '2012-12-24 19:57:20' AND '2012-12-24 20:57:20' 
    OR (a.start < '2012-12-24 19:57:20' AND a.end > '2012-12-24 20:57:20') 
) 
union 
select null, null, null -- how every many column are in the first part 
where not exists (
    select * 
    from ios_appointments a join ios_workinghours h using(workerid_fk) 
    where workerid_fk = 1 
    AND h.start <= '19:57:20' AND h.end >= '20:57:20' 
    AND ( 
     a.start BETWEEN '2012-12-24 19:57:20' AND '2012-12-24 20:57:20' 
     OR a.end BETWEEN '2012-12-24 19:57:20' AND '2012-12-24 20:57:20' 
     OR (a.start < '2012-12-24 19:57:20' AND a.end > '2012-12-24 20:57:20') 
    ) 
) 

這將返回空值的一行,如果您的查詢找到什麼,或者現在如果行被發現行爲。

您可以返回所需的任何值而不是空值。

+0

謝謝你的回答。這個聲明的問題在於,每次沒有找到約會時,它現在會返回一個空行。當時間超出工作時間時,我只需要一個空行。任何想法呢? – doonot

+0

Afaik沒有空行這樣的東西。你不能使用你的應用程序層(php?)來檢查結果集中的行數嗎? – Bohemian

相關問題