Hi, I would like to figure out how to determine what the id of the last element in a table is. Is there an equivalent to the Table.find() method which will tell me the number of elements in a table? also, maybe more importantly, where are the available methods on tables documented? What i am trying to do is to increment the id and work through a table and check whether the id i am currently on is the last in the table. thanks for any help -- Posted via http://www.ruby-forum.com/.
Model_Name.find_all.last and the API is at http://api.rubyonrails.com/ -- Posted via http://www.ruby-forum.com/.
Roland Mai wrote:> Model_Name.find_all.last > > and > > the API is at > > http://api.rubyonrails.com/thanks -- Posted via http://www.ruby-forum.com/.
On Monday, June 26, 2006, at 8:26 PM, Seamus Gilchrist wrote:>Roland Mai wrote: >> Model_Name.find_all.last >> >> and >> >> the API is at >> >> http://api.rubyonrails.com/ > >thanks > >-- >Posted via http://www.ruby-forum.com/. >_______________________________________________ >Rails mailing list >Rails@lists.rubyonrails.org >http://lists.rubyonrails.org/mailman/listinfo/railsThe previously mentioned approach will load all records into memory, which could be a performance problem. Try this.. Model.find(:first, :order=>''id DESC'') or if you have a ''created_at'' field, use Model.find(:first, :order=>''created_at DESC'' _Kevin -- Posted with http://DevLists.com. Sign up and save your mailbox.
On Monday, June 26, 2006, at 8:26 PM, Seamus Gilchrist wrote:>Roland Mai wrote: >> Model_Name.find_all.last >> >> and >> >> the API is at >> >> http://api.rubyonrails.com/ > >thanks > >-- >Posted via http://www.ruby-forum.com/. >_______________________________________________ >Rails mailing list >Rails@lists.rubyonrails.org >http://lists.rubyonrails.org/mailman/listinfo/railsThe previously mentioned approach will load all records into memory, which could be a performance problem. Try this.. Model.find(:first, :order=>''id DESC'') or if you have a ''created_at'' field, use Model.find(:first, :order=>''created_at DESC'' _Kevin -- Posted with http://DevLists.com. Sign up and save your mailbox.
Kevin Olbrich wrote:> On Monday, June 26, 2006, at 8:26 PM, Seamus Gilchrist wrote: >> >>-- >>Posted via http://www.ruby-forum.com/. >>_______________________________________________ >>Rails mailing list >>Rails@lists.rubyonrails.org >>http://lists.rubyonrails.org/mailman/listinfo/rails > > The previously mentioned approach will load all records into memory, > which could be a performance problem. Try this.. > > Model.find(:first, :order=>''id DESC'') > > or if you have a ''created_at'' field, use > > Model.find(:first, :order=>''created_at DESC'' > > _KevinKevin, this seems to work ok - I saw looking at the sql documentation that there is a sql call that you can make to find the id of the last inserted elements in autoincrement tables - ...... from mysql documentation If you insert a record in a table containing a column that has the AUTO_INCREMENT attribute, you can get the most recently generated ID by calling the mysql_insert_id() function. You can also retrieve the ID by using the LAST_INSERT_ID() function in a query string that you pass to mysql_query(). You can check if an AUTO_INCREMENT index is used by executing the following code. This also checks if the query was an INSERT with an AUTO_INCREMENT index: if (mysql_error(&mysql)[0] == 0 && mysql_num_fields(result) == 0 && mysql_insert_id(&mysql) != 0) { used_id = mysql_insert_id(&mysql); } ....... is there any way to invoke this function directly from rails on the table? would it be more efficient to do this? thanks -- Posted via http://www.ruby-forum.com/.
On Tuesday 27 June 2006 13:37, Seamus Gilchrist wrote:> > The previously mentioned approach will load all records into memory, > > which could be a performance problem. Try this.. > > > > Model.find(:first, :order=>''id DESC'') > > > > or if you have a ''created_at'' field, use > > > > Model.find(:first, :order=>''created_at DESC''This sounds like the best solution to your problem.> this seems to work ok - I saw looking at the sql documentation that > there is a sql call that you can make to find the id of the last > inserted elements in autoincrement tables -[...]> You can also retrieve the ID by using the LAST_INSERT_ID() function in > a query string that you pass to mysql_query().[...]> is there any way to invoke this function directly from rails on the > table? would it be more efficient to do this?It sounds like you are trying to find a pretty ass-backwards solution to a simple problem :) Actually I''d even reexamine the problem: If your app has any amount of parallelism, the "last record in the table" right now might not be the last record in the table two milliseconds afterwards. So -- why exactly do you want to know if the record is the last one? -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 191 bytes Desc: not available Url : http://wrath.rubyonrails.org/pipermail/rails/attachments/20060627/dbedbb31/attachment.bin
Christian Reiniger wrote:> On Tuesday 27 June 2006 13:37, Seamus Gilchrist wrote: > >> > The previously mentioned approach will load all records into memory, >> > which could be a performance problem. Try this.. >> > >> > Model.find(:first, :order=>''id DESC'') >> > >> > or if you have a ''created_at'' field, use >> > >> > Model.find(:first, :order=>''created_at DESC'' > > This sounds like the best solution to your problem. > >> this seems to work ok - I saw looking at the sql documentation that >> there is a sql call that you can make to find the id of the last >> inserted elements in autoincrement tables - > [...] >> You can also retrieve the ID by using the LAST_INSERT_ID() function in >> a query string that you pass to mysql_query(). > [...] >> is there any way to invoke this function directly from rails on the >> table? would it be more efficient to do this? > > It sounds like you are trying to find a pretty ass-backwards solution to > a > simple problem :) > Actually I''d even reexamine the problem: If your app has any amount of > parallelism, the "last record in the table" right now might not be the > last record in the table two milliseconds afterwards. So -- why exactly > do you want to know if the record is the last one?Actually, this particular table in the database is static and will not change over time. So, there is no issue of parallelism here. I am surprised that there is no method which corresponds directly to the last_insert but if the Model.find(:first, :order=>''id DESC'') is the appropriate way and an efficient way to do this - ok! that''s what we''ll do. thanks -- Posted via http://www.ruby-forum.com/.
On Tuesday 27 June 2006 16:00, Seamus Gilchrist wrote:> Actually, this particular table in the database is static and will not > change over time. So, there is no issue of parallelism here. I am > surprised that there is no method which corresponds directly to the > last_insert but if the Model.find(:first, :order=>''id DESC'') is the > appropriate way and an efficient way to do this - ok! that''s what we''ll > do.It definitely is. LAST_INSERT_ID is basically only intended for use immediately after you inserted a row, to allow you to know the (auto-incremented) primary key the row was inserted with. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 191 bytes Desc: not available Url : http://wrath.rubyonrails.org/pipermail/rails/attachments/20060627/8c37268b/attachment.bin