更新表中的顺序值 - mysql select query有多个连接

时间:2015-08-11 10:34:33

标签: php mysql

我对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

2 个答案:

答案 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 joinHow 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