maltrecho
10-17-2003, 10:36 PM
As soon as a new post is inserted, the user is going to be taken to his/her new-last post (just like this forum). For that I am calculating the number of posts immediately after the new post is inserted.
Every page is set by an $offset, so if the $offset is 0 -> posts from 1 to 10 are shown; if $offset = 10 -> posts 11 to 20 are shown and on.
Example1: currently posts = 0; User inserts a new post; number of posts now = 1; $offset must be 0 -> User is taken to page showing posts from 1 to 10.
Example2: currently posts = 17; User inserts a new post; number of posts now = 18; $offset must be 10 -> User is taken to page showing posts from 10 to 20.
Example2: currently posts = 40. User inserts a new post. number of posts now = 41; $offset must be 40 -> User is taken to page showing posts from 40 to 50.
So I need a function to calculate the $offset needed to take the user to the required page knowing only the current number of posts.
Anybody good at maths?
mordred
10-17-2003, 10:54 PM
I'm not a hobby mathematician, but isn't what you ask for close to this?
function calculateOffset($currentPostCount) {
return floor(($currentPostCount) / 10) * 10;
}
// testing
$postCounts = array(0, 17, 40);
foreach ($postCounts as $key => $value) {
var_dump(calculateOffset($value));
}
Seemd quite straighforward to me, so I wonder if I understood your request completely...
missing-score
10-17-2003, 11:49 PM
that should work fine, assuming you understood right. (we both read it the same way.
Here is a function that I already had written that i use when i need to do something like this. This is for use with database querying, so it may be handy if ur using a db.
function MySQL_Limit($offset, $perpage){
$offset_start = ((floor($offset)/$perpage)*$perpage);
$offset_end = ($offset_start+$perpage);
return $offset_start.','.$offset_end;
}
// eg:
MySQL_Limit(32, 10);
// 32 = message number
// 10 = how many per page
maltrecho
10-17-2003, 11:55 PM
That rocks morded, ther's just one prob :eek: :
if one of the $postCounts is 10 or 40 or 70, $offset must be 0, 30 or 60.
$offset 0 will show up posts 1 to 10.
$offset 30 will show up posts 31 to 40
$offset 60 will show up posts 51 to 60
the above should be "...will show up posts 61 to 70"
with the function above $postCounts 40 will give us $offset 40, and that's wrong. That is the main problem. I think we have to subtract 1 somehow somewhere.
missing-score
10-17-2003, 11:58 PM
huh?
that doesnt make much sense...
if one of the $postCounts is 10 or 40 or 70, $offset must be 0, 30 or 60.
$offset 0 will show up posts 1 to 10.
$offset 30 will show up posts 31 to 40
$offset 60 will show up posts 51 to 60
it seems that you contradict urself on that line. Do you mean you need 61-70?
maltrecho
10-18-2003, 12:13 AM
That was a mistake. Should be 61 - 70. :p
missing-score: very interesting your function. I'll keep it for further projects (now it would be very annoying to change the way my queries and code are executed). I have always had problems to find out the last offset. You see this post?
missing-score
10-18-2003, 12:21 AM
try
function getOffset($num){
if($num <= 10){
$offset = 0;
} else {
$nearest10 = round($num, -1);
$offset = ($nearest10 >= $num) ? ($nearest10-10) : ($nearest10);
}
return $offset;
}
example:
echo getOffset(54);
does that work? I hope im understanding right!
maltrecho
10-18-2003, 12:46 AM
That is marvelous...! I always go mad when it comes to maths.
Thanks a million guys! :thumbsup:
maltrecho
10-18-2003, 06:12 PM
This is working pretty good too (I'm becoming better): :o
$num_posts = 40;
$last_offset = substr_replace(($num_posts-1), "0", -1);