Re: php mysql problem
| From: | Richard Lynch | Date: | Tue, 02 May 2006 20:49:07 +0000 |
| Subject: | Re: php mysql problem | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-235304@lists.php.net to get a copy of this message | ||
On Tue, May 2, 2006 5:00 am, Ross wrote:
> CREATE TABLE
mytable (
> id int(4) NOT NULL auto_increment,
> fileName varchar(50) NOT NULL default '',
> PRIMARY KEY (id)
> ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
>
>
> when I add items they go id 1,2,3 etc. Whn I delete them gaps appear.
> 1, 3,
> 7. I need to know
>
> (a) when items are removed how can I sort the database to all the gaps
> are
> take out 1, 3, 7 becomes 1,2,3
You do *NOT* want to do this on an auto_increment field in a
relational database.
It's just a Bad Idea in so many ways...
For starters, you're going to need that 'id' field in a bunch of other
tables to relate the two tables -- That's kinda why they call it a
RELATIONAL database.
So if you re-number this table, you have to go through all the other
tables related to this table and update them as well.
You're looking at a cascading nightmare of updates.
> (b) allow the ids to be changed so the items can change position in
> the
> list. If I change id 3 to id 1 then everything else shifts down.
>
> If anyone has seen the amazon dvd rental list where you can swap dvd
> to the
> top of the list and delete this is what I am trying to achive with
> php/mysql.
THAT is another kettle of fish entirely.
You pretty much just need to manage the numbering on a different
column "by hand"
create table mytable(id int(11) auto_increment, rank int(4));
Queries you will find useful:
//The rank for the new item added to end of list:
select max(rank) + 1 from mytable;
//Queries to move to top of list:
$id = /* get ID of row here */
$rank = /* get current $rank of that row here */
update mytable set rank = rank + 1 where rank < $rank
update mytable set rank = 1 where id = $id
It's easy to mess up and get everything "off by one" but this is not
rocket science to figure out and debug.
--
Like Music?
http://l-i-e.com/artists.htm