I've got a paging mechanism built into the Iterator right now. So long as the Iterator is cached (which it is inside a record (so long as the record is cached)) you can page with that. But there are still some cases where that's not a good solution. IE: 30000 records being returned. This is where a nicely done limit function would be nice.
Doug -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Cody Caughlan Sent: Thursday, February 23, 2006 12:28 PM To: [email protected] Subject: RE: [Reactor For CF] maxrows and limit Well, it gets even trickier too. To correctly do paging you also need to know how many rows your query would have returned *without* the TOP/LIMIT clause in there (so you know how many pages to draw). This is where it gets really complicated. MySQL: SELECT SQL_CALC_FOUND_ROWS id,name FROM users LIMIT 30,10 Will you get the next 10 rows starting from row 30. And then you can run "SELECT FOUND_ROWS()" and it will return the complete number of rows your query would have returned *without* the LIMIT clause, e.g. "238" or whatever. MSSQL is even tricker. To even do offsets you have to do nested TOPs as described here: http://rosca.net/writing/articles/serverside_paging.asp To get the complete number of rows you have to take your full query and do a COUNT(*) with all other criteria in the query being equal. MSSQL is definitely tricker than MySQL when it comes down to this. If anyone knows of a better way to do paging with MSSQL I would love to hear about it. With that being said, we were developing an application that returned hundres of pages (with a page size of 20) and since there was so much calculations in the SELECT clauses we needed a way to cache these results as the users went from page to page (but were still navigating the same result set, even with column sorting). Anyways, we came up with a fast and efficient way to do this so if anyone is interested in hearing that, let me know. /Cody -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Doug Hughes Sent: Thursday, February 23, 2006 9:13 AM To: [email protected] Subject: RE: [Reactor For CF] maxrows and limit Eww, I'm not diggin' that. I'll think on this some more. I'll also think on your suggestion Chris. The Oracle solution is the hardest. (Why the heck is Oracle so well respected and so wonkey at the same time?!) Doug -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Bowden, Beth (NIH/NIEHS) [E] Sent: Thursday, February 23, 2006 11:37 AM To: [email protected] Subject: RE: [Reactor For CF] maxrows and limit If your sql includes a sort, "SELECT * FROM foo WHERE rownum <= n order by z" won't work well because the where clause is applied prior to the order by clause. This will work pretty uniformly for Oracle: "select * from (SELECT * FROM foo order by z) WHERE rownum <= n" Beth Bowden Phone: 919-541-3355 FAX: 919-541-3687 E-Mail: [EMAIL PROTECTED] Address: NIEHS, MD EC-03, P.O. BOX 12233, Research Triangle Park, NC 27709 -----Original Message----- From: Chris Blackwell [mailto:[EMAIL PROTECTED] Sent: Thursday, February 23, 2006 11:39 AM To: [email protected] Subject: RE: [Reactor For CF] maxrows and limit Hi Doug, Yeah I think that would be a good idea, if you can find a way to implement it. From a little bit of googling it seems the syntax does vary a lot. Mysql: SELECT * FROM foo LIMIT n PGSql: SELECT * FROM foo LIMIT n MSSQL: SELECT TOP n * FROM foo Oracle: SELECT * FROM foo WHERE rownum <= n If you can find a way to do that, maybe the MySQL (and PGSql) implementation could include the optional offset value. query.setMaxRows(n [, offset]) wouldn't break anything ;) Keep up the good work Cheers, Chris -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Doug Hughes Sent: 23 February 2006 16:07 To: [email protected] Subject: RE: [Reactor For CF] maxrows and limit As it regards to limiting, I may well change the maxrows to a db-specific mechanism. However, I won't add the full range of paging that the limit operator allows for in mysql. So, for all dbs, the maxRows would run a db-specific TOP or LIMIT (or whatever) to return only the maxRows number of rows. Doug -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Sean Corfield Sent: Thursday, February 23, 2006 10:59 AM To: [email protected] Subject: Re: [Reactor For CF] maxrows and limit On 2/23/06, Marlon Moyer <[EMAIL PROTECTED]> wrote: > They support it by other means. I know mssql supports TOP, which is very > much like LIMIT, but it does not support OFFSET, which, when it all comes > down to it is very important with db based paging. Reactor currently does not support limiting results returned by a query in the DB-specific ways you mention. However, it does now support paging on large record sets (assuming you wanted to page thru all 13,000 rows). -- Sean A Corfield -- http://corfield.org/ Got frameworks? "If you're not annoying somebody, you're not really alive." -- Margaret Atwood -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/ -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/ -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/ -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/ -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/ -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/ -- Reactor for ColdFusion Mailing List -- [email protected] -- Archives at http://www.mail-archive.com/reactor%40doughughes.net/

