mysql按日期和用户标识选择行对

时间:2012-11-29 22:30:51

标签: mysql row

我正在寻找一种方法来改变行对的两个值的columvalue。 找到正确的行对是通过分组完成的。问题是由于分组,只返回一个row_id。

案例: 培训师可以在一天内举办两场活动 如果客户计划进行培训,培训师会访问该客户,这样他就无法在第二次会议中访问另一位客户 计划火车运输的客户可以获得具有价值“空”或其客户身份的位置的活动 通过这种方式,客户可以在一天内计划多个会话,而另一个客户在第一个客户在另一个客户处时不能声明第二个事件 通过两个步骤声明事件:首先将状态更改为“待定”并且事件获得过期,在下一步中状态将更改为“已获取”。 当待处理事件到期时,状态将更改回“打开”。

问题:无法始终清除位置。如果采取或未决其他事件,则无法清除该位置。当两个事件都“打开”时,必须清除两者的位置。

设计: events-table包含一个colum'location'。 如果计划了某个活动,则此日的所有“位置”字段都将设置为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到期,状态必须设置为'open',并且eventid 2 AND 3的位置必须设置为NULL 如果eventid 4到期,则状态必须设置为'open,但是eventid 4 AND 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)
)

我使用分组来查找对,但分组只返回一个偶数。

有任何关于获得两种情况的建议吗?

1 个答案:

答案 0 :(得分:0)

如果你想更新两行,就不需要分组(假设我正确理解你)。

你可以这样重写查询二:

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