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
andvid
都是正整数,并且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
一个初始值,那么这不会发生,但又一次,这意味着我的想法和我的查询是虚假的,但为什么/如何?