On Friday, June 7, 2002, at 03:06  AM, rory oconnor wrote:

> I have a mysql database table of about 7000 images (they are not
> actually in the db, just references), as yet uncategorized.  I need to
> put them online and allow my client to browse 12-18 thumbnails per page.
>
> what would be the most efficient method to code that with PHP?  any help
> is appreciated!

First a disclaimer -- what I am about to tell you may sound very 
complicated, but only because it's hard to explain.  Really, the concept 
is simple once you "get" it.

Some people have said look into the LIMIT clause in a MySQL SELECT 
query.  This is the right direction, but specifically you need to use 
the (implicit) OFFSET argument to LIMIT.

Fundamentally, what you do is this:

You perform a SELECT as normal, which would return all results from your 
database, but you use LIMIT 0, 10 which means "Limit it to 10 records 
starting at the first one".  [Yes, it's weird since your row's primary 
key column probably starts with 1, but if you think about it it's not 
really weird, MySQL doesn't care what value is in your row's primary key 
column.  The first record/row is 0.]

The offset is going to be passed via a GET variable, so your query will 
look something like:

SELECT  row_id,
                row_content
FROM            table
WHERE   where conditions here
LIMIT   $offset, 10;

This is because if the person clicks the "next 10 rows" link, which you 
will provide, this link will have a querystring attached that looks 
something like "?offset=10" or whatever offset it is.

So how do you implement this into a PHP script?  Well, sure there's a 
lot of ways to do it but essentially, you do this:

On the first page, you have two queries -- first a COUNT to see how many 
records are in the table, and second the above SELECT query that does 
the work you want done (getting the information).

Now, using the first query's results (which are nothing more than the 
number of records in the table), you figure out how many more rows are 
left AFTER the offset that you are at.  If this is the first page, and 
you are displaying ten results on the first page, then simply subtract 
ten from the total.  If this is the second page, you have now displayed 
twenty records, so subtract twenty.  Save this value as a variable like 
$rowsLeft or something.  Also, you want to save the number of rows 
PREVIOUS to your current offset, which for the first page would be 0 but 
for the second page would be 10, and for the third page would be 20.  
Get it?  This is how you will make a link that says "next 10 thumbnails" 
or "previous 10 thumbnails" or whatever.

Next step is easy: you simply display the data however you wish to do 
it.  I'm not going to tell you how to do this because it's the same way 
you'd display the data normally.

Finally, you need to make the links to go backward or forward.  This is 
the whole trick of the operation.  You make a link to the page's self, 
but you pass along the offset so that the next query knows how to build 
the proper SELECT statement to return the -next- ten rows, etc.  Like 
this:

print("<a href=\"" . $_SERVER['PHP_SELF'] . "?offset=" . $offset . 
"\">Next 10 Thumbnails</a>");

Of course, the above link is really too simple.  You would want to 
determine the number of rows that will be returned, which will usually 
be 10 but not always -- on the second to last page, if there are only 4 
rows left to display, you don't want to say "Next 10 thumbnails" if 
there are only 4 left.  So you need to do a simple bit of processing to 
get the number of rows left and print that value.

Do the same for the "previous 10 thumbnails", although if you do this 
right you will always have a value of 10 in this section.  (When would 
you ever end up at an offset that is not a multiple of 10?)

That's all there is to it.  It's complicated at first, but once you get 
it, you'll always be able to do it.  I strongly recommend that you 
create a class called "ThumbnailResults" and store all of this logic in 
the class, since it'll keep your script cleaner.

Good luck,


Erik




----

Erik Price
Web Developer Temp
Media Lab, H.H. Brown
[EMAIL PROTECTED]




-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to