2017-06-20 45 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