Re: PHP + MySQL - Load last inserts

From: Date: Mon, 30 Mar 2009 22:35:10 +0000
Subject: Re: PHP + MySQL - Load last inserts
References: 1 2 3 4 5 6 7  Groups: php.general 
Request: Send a blank email to php-general+get-290869@lists.php.net to get a copy of this message
On Mon, Mar 30, 2009 at 5:10 PM, Chris <dmagick@gmail.com> wrote: > haliphax wrote: >> >> On Mon, Mar 30, 2009 at 9:13 AM, Sebastian Muszytowski >> <s.muszytowski@googlemail.com> wrote: >>> >>> haliphax schrieb: >>>>> >>>>> [..cut...] >>>> >>>> Except when your primary key value rolls over, or fills a gap between >>>> two other rows that was left when a row was deleted/moved/etc... there >>>> has got to be a better way than grabbing rows in descending order >>>> based on the auto_increment value. >>>> >>>> Are you doing the inserts one at a time? If so, why not just use code >>>> to remember what you put in the DB? >>>> >>> I do the inserts one at a time, i could use code to remember but i think >>> it >>> would be very slow when i have too much users. >>> >>> The second thing that aware me from doing this is, why use/build >>> ressources >>> when you could use others? i think why should i use and add another >>> system? >>> I work with mysql already and when php+mysql have the function i need >>> it's >>> better and i don't waste ressources :) >> >> Insert 100 records. Delete 50 of them at random. Now do your "grab the >> last few records and sort them in descending order" trick and see >> where it gets you. > > Mysql does not re-use id's (nor does any other db as far as I'm aware, and > nor should it). I don't know where you got that idea from. > > mysql> create table test (id int auto_increment not null primary key, name > text); > Query OK, 0 rows affected (0.12 sec) > > mysql> insert into test(name) values > > ('one'),('two'),('three'),('four'),('five'),('six'),('seven'),('eight'),('nine'),('ten'); > Query OK, 10 rows affected (0.00 sec) > Records: 10  Duplicates: 0  Warnings: 0 > > mysql> select * from test; > +----+-------+ > | id | name  | > +----+-------+ > |  1 | one   | > |  2 | two   | > |  3 | three | > |  4 | four  | > |  5 | five  | > |  6 | six   | > |  7 | seven | > |  8 | eight | > |  9 | nine  | > | 10 | ten   | > +----+-------+ > 10 rows in set (0.00 sec) > > mysql> delete from test where id in (1,3,7); > Query OK, 3 rows affected (0.00 sec) > > mysql> insert into test(name) values('eleven'); > Query OK, 1 row affected (0.00 sec) > > mysql> select * from test; > +----+--------+ > | id | name   | > +----+--------+ > |  2 | two    | > |  4 | four   | > |  5 | five   | > |  6 | six    | > | 11 | eleven | > |  8 | eight  | > |  9 | nine   | > | 10 | ten    | > +----+--------+ > 8 rows in set (0.00 sec) > > The physical order of the rows changed (as you can see) but it does not > re-use the id's that were deleted. > > Ordering by the id will get you the last bunch inserted. > > If you're using innodb you'll have to be aware it's transaction specific, if > you're using myisam it will be system wide. I'll have to check my DBs then, because the exact situation I described happened to me a few years back when I was first getting into the DB scene. Regardless, I'm fairly certain the MSSQL box we have at work behaves this way. -- // Todd

« previous php.general (#290869) next »