我对mySQL非常好,但出于某种原因,我很难理解这个问题。
我需要以编程方式更新wp_esp_ticket表中的订单值,因为日期有时会出现故障。这是我必须用来恢复所有彼此相关并需要订购的日期的查询:
if &modified
" do something if the buffer is modified
else
" do something else if it is not
endif
这会以正确的顺序返回所有需要更新的行,但是wp_esp_ticket表中的TKT_order列则不按顺序排列。我需要在TKT_order列中为top行赋值1,并为下面的每一行增加1。
我需要为此整理一个整洁的sql语句,因为它需要与另一个为数据库添加新日期的代码一起运行。
Thanksss !!!
更新
感谢Drew的投入和指导,我得到了这个工作:
SELECT * FROM `wp_esp_ticket` et
INNER JOIN wp_esp_datetime_ticket edtt on edtt.TKT_ID = et.TKT_ID
INNER JOIN wp_esp_datetime edt on edtt.DTT_ID = edt.DTT_ID
WHERE edt.EVT_ID = 1325
答案 0 :(得分:0)
从页面顶部附近的Manual开始。
例如,如果表在id列中包含1和2,则表示1 在2更新为3之前更新为2,发生错误。为了避免这种情况 问题,添加一个ORDER BY子句以使id更大的行 要在具有较小值的值之前更新的值:
UPDATE t SET id = id + 1 ORDER BY id DESC;
请注意,这是手册中的概念。相应地调整。
将更新/订单与update with a join
(How to do 3 table JOIN in UPDATE query?)的概念相结合,您就已经完成了设置。
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
在你的情况下,我分道扬and,用rownum:
set @rownum:=0;
update `wp_esp_ticket` et
INNER JOIN wp_esp_datetime_ticket edtt on edtt.TKT_ID = et.TKT_ID
INNER JOIN wp_esp_datetime edt on edtt.DTT_ID = edt.DTT_ID
set TKT_order =@rownum:=@rownum+1
WHERE edt.EVT_ID = 1325
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
see this rough example in action:
create table j
( k varchar(20) not null,
theOrder int not null
);
insert j(k,theOrder) values ('z',-1),('gj',-1),('w',-1),('h',-1),('uw',-1),('b',-1);
set @rownum:=0;
update j
set theOrder=@rownum:=@rownum+1
order by k;
+----+----------+
| k | theOrder |
+----+----------+
| b | 1 |
| gj | 2 |
| h | 3 |
| uw | 4 |
| w | 5 |
| z | 6 |
+----+----------+
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
答案 1 :(得分:0)
不确定TKT_order
是现有列还是计算列。如果它是现有列,那么如果在order by
TKT_order
子句,该怎么办?
SELECT * FROM `wp_esp_ticket` et
INNER JOIN wp_esp_datetime_ticket edtt on edtt.TKT_ID = et.TKT_ID
INNER JOIN wp_esp_datetime edt on edtt.DTT_ID = edt.DTT_ID
WHERE edt.EVT_ID = 1325
ORDER BY et.TKT_order; <-- This one