SET @last_nid=-1;
SELECT vid,
IF(@last_nid = nid, @last_status, 0) AS last_status,
@last_status := status AS status,
@last_nid := nid AS nid
FROM node_field_revision
ORDER BY vid;
nidとvidは両方とも正の整数でstatus、0 または 1 のいずれかです。
last_statusどのようにして-- になるのか完全に途方にNULL暮れていますが、確かにそうです。
MySQL のマニュアルには次のように書かれています。
expr1 が TRUE (expr1 <> 0 および expr1 <> NULL) の場合、IF() は expr2 を返します。それ以外の場合は expr3 を返します。
まあ、最初は反復@last_nidは等しくありませんnid。なぜなら、一方が負で、もう一方が正だからです。したがって、0 が返されます。はい、@last_statusここでは NULL ですが、返すことはできません。次に、0 または 1 のいずれか@last_statusの値を入力します。status
以降の反復では、@last_status再び NULL になることはありません。
それでも、圧倒的多数の行には NULL があります@last_status-@last_status初期値を指定してもそれは起こりませんが、これは私の考えと私のクエリが偽物であることを意味しますが、なぜ/どのように?