我正在寻找一种更改行对的两个值的列值的方法。
查找正确的行对是通过分组完成的。问题是由于分组,仅返回一个row_id。
案件:
培训师一天可以进行两次活动。
如果客户计划培训活动,则培训师会拜访该客户,因此他无法在第二次会议中拜访另一个客户。
计划培训活动的客户将获得所提供的活动,其位置的值为“空”或其客户ID。
这样,一位客户可以在一天中计划多个会话,而另一位客户在第一位客户在另一位客户时不能提出第二笔活动。
声明事件分为两个步骤:首先将状态更改为“待定”,事件获得到期日期,在下一步中,状态更改为“已接受”。
当待处理事件到期时,状态将更改回“打开”。
问题:无法始终清除该位置。如果发生或正在处理其他事件,则无法清除该位置。当两个事件均“打开”时,必须清除两个事件的位置。
设计:
事件表包含一个列的“位置”。
如果计划举办活动,则将当天的所有“位置”字段都设置为customerid;
eventid - orderid - eventdatetime - expiredate - status - location
2 - NULL - 12 december 2012 9:00 - NULL - open - 45
3 - 54 - 12 december 2012 13:00 - 23nov2012 - pending - 45
4 - 74 - 13 december 2012 9:00 - 23nov2012 - pending - 45
5 - 23 - 13 december 2012 13:00 - NULL - taken - 45
6 - NULL - 14 december 2012 9:00 - NULL - open - NULL
7 - NULL - 14 december 2012 13:00 - NULL - open - NULL
如果eventid 3过期,则必须将状态设置为“打开”,并且将eventid 2 AND 3的位置设置为NULL。
如果事件ID 4过期,则必须将状态设置为“打开”,但必须保持事件ID 4和5的位置不变。
我在两个查询中执行此操作:
查询一:
update trainingevents
set orderid = null
set expiredate = null
set status = "open"
where expiredate > now()
查询二:
update trainingevents
set location = null
set expiredate
where eventid in (
select eventid from trainingevents
where count(orderid)=0 and count(location)>0
group by date_format(eventdatetime, only date)
)
我使用分组查找对,但是分组仅返回一个eventid。
有什么建议同时获取两个事件ID?
最佳答案
如果要更新两行,则无需分组(假设我正确理解了您)。
您可以这样重写查询二:
update trainingevents
set location = null
set expiredate = null
where eventid in (
select eventid from trainingevents
where orderid is null and location is not null
)
或者,更简单地说
update trainingevents
set
location = null,
expiredate = null
where orderid is null and location is not null
关于mysql - MySQL按日期和用户ID选择行对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13635962/