Am Donnerstag, 30. Januar 2003 00:02 schrieb Dan Nelson:
> In the last episode (Jan 29), Igor Kutsyy said:
> > Could you help me with this. I`m trying to increment values of
> > primary auto_increment field from table, and ofcourse it is not
> > working. Could you tell me how to construct a query correctly.
> > +-------+--------------+------+-----+---------+----------------+
> >
> > | Field   | Type           | Null  | Key | Default | Extra          |
> >
> > +-------+--------------+------+-----+---------+----------------+
> >
> > | id      | int(11)         |         | PRI | NULL    | auto_increment |
> > | descr | varchar(255) | YES| MUL | NULL    |                     |
> >
> > +-------+--------------+------+-----+---------+----------------+
> >
> > mysql> update tb_roubr set id=id+1 where id>1 order by id;
>
> UPDATE statements return no records, so ORDER BY is meaningless.  You
> can't control the order the records are modified.  If your problem is
> that id is a primary key and it won't let you temporarily have
> duplicate id's, just drop the index, do your update, and recreate it.
> If you can't drop the index, you can sort of cheat by creating another
> unindexed column id1, then do three separate updates: SET id1=id, SET
> id=NULL, then finally SET id=id1.  You might be able to do the first
> two at the same time with "SET id1=id, id=NULL", but test it on a
> scratch table first :)

Actually, you _can_ use ORDER BY with UPDATE.

It works fine, if you do an

update tb_roubr set id=id+1 where id>1 order by id DESC

on your table.

DESC (=descending) means that UPDATE will iterate through the rows from the 
end (that is the highest number) to top (that is id=1). That way, you keep 
the primary key unique.

What you have done was an implicit ORDER BY id ASC (=ascending), which 
obviously failed.
-- 
Christian Kohlschütter
[EMAIL PROTECTED]

http://www.newsclub.de - Der Meta-Nachrichten-Dienst


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to