2017-06-20 40 views
0

我試圖找到一種方式來運行更新查詢orientdb,我更新多個屬性字段中。我將在邊緣具有兩個屬性,一個名爲acknowledged_at,另一個名爲read_at。在read_at更新之前,acknowleded_at字段可以被更新。但是,我想確保在更新所有read_at字段時,我還確保任何acknowledge_at字段都使用當前時間戳更新(如果它們以前未設置)。orientdb只更新,如果空

我的使用情況,這是有Facebook的通知等。用戶可以確認通知,但不能在當時閱讀。但是,如果他們點擊一個read_all按鈕,或者稍後決定「讀取」該通知,那麼我想確保我也正在更新acknowledgeed_at屬性(如果它爲null)。

有沒有辦法做到在acknowledged_at場case語句類型的更新,如果空只更新?

更新:只是爲了更清楚,我總是要更新read_at場,但只希望更新acknowledged_at場,如果它是空的。如果以前承認我希望保持這個價值。

UPDATE EDGE received SET read_at = '#{DateTime.now}', acknowledged_at = '#{DateTime.now}' WHERE out.employeeId = '#{employeeId}' 

回答

0

UPDATE EDGE收到SET ... WHERE acknowledged_at IS NULL

UDPATE

這對我的作品

update edge received set read_at = "2017-06-23 19:29:00",acknowledged_at=ifnull(acknowledged_at, "2017-06-23 19:29:00") WHERE out.employeeId = 'A002' 

ref。 https://orientdb.com/docs/2.2/SQL-Functions.html

+0

在我上面的場景中,我總是希望更新read_at字段,但只有在值爲null時才更新acknowledge_at。在我的場景中,可能已經確認了通知,但未讀取它。將是有條件的,如果該值爲null,而read_at始終得到更新。 –

+0

@DavidBodenschatz嗨,我已經更新了答案。現在應該工作 –

+0

謝謝,這解決了問題。感謝幫助。 –

0

試試這個(或變化)

UPDATE... SET read_at = IF(read_at > 0, read_at, '#{DateTime.now}') 
+0

我嘗試了以下,但它失敗。 'UPDATE EDGE接收read_at SET = '2017年6月21日16點20分00秒',acknowledged_at = IF(acknowledged_at> 0,acknowledged_at, '2017年6月21日16點20分00秒'),其中鍵= '24 ' –

+0

嘗試:IF(acknowledged_at IS NULL)。如果失敗,則必須拆分查詢,每列一列。可以選擇發送批量爲SQL的批量:https://orientdb.com/docs/2.2/SQL- batch.html – bato3