1

行ペアの両方の値の列値を変更する方法を探しています。正しい行ペアの検索は、グループ化によって行われます。問題は、グループ化のために返される row_id が 1 つだけであることです。

ケース: トレーナーは 1 日に 2 つのイベントを持つことができます。
顧客がトレーニング イベントを計画している場合、トレーナーはその顧客を訪問するため、2 回目のセッションで別の顧客を訪問することはできません。
トレーニング イベントを計画している顧客は、場所の値が「Null」または顧客 ID のイベントを提供されます。
このようにして、顧客は 1 日に複数のセッションを計画できますが、別の顧客は最初のイベントが別のクライアントであるときに 2 番目のイベントを要求することはできません。
イベントは 2 つのステップで要求されます。最初にステータスが「保留中」に変更され、イベントが期限切れになり、次のステップでステータスが「取得済み」に変更されます。保留中のイベントが期限切れになると、ステータスは「オープン」に戻ります。

問題: 場所を常にクリアできるとは限りません。他のイベントが取得済みまたは保留中の場合、その場所はクリアできません。両方のイベントが「オープン」の場合、両方の場所をクリアする必要があります。

設計: イベント テーブルには、列「場所」が含まれています。イベントが計画されている場合、この日のすべての「場所」フィールドは顧客 ID に設定されます。

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 の場所と5 そのままにしておく必要があります

これを 2 つのクエリで行います。

クエリ 1:

update trainingevents
set orderid = null
set expiredate = null
set status = "open"
where expiredate > now()

クエリ 2:

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 つのイベント ID しか返しません。

両方のイベント ID を取得するための提案はありますか?

4

1 に答える 1

0

両方の行を更新したい場合は、グループ化する必要はありません (私があなたを正しく理解していると仮定して)。

クエリ 2 を次のように書き換えることができます。

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
于 2012-11-30T12:08:44.727 に答える