行ペアの両方の値の列値を変更する方法を探しています。正しい行ペアの検索は、グループ化によって行われます。問題は、グループ化のために返される 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 を取得するための提案はありますか?