|
Posted by Sandman on 10/26/40 11:25
Just looking for suggestion on how to do this in my Web application.
The goal is to keep track of what a user has and hasn't read and present him or
her with new material
I am currently doing this by aggregating new content from all databases into a
single indexed database and then saving a timestamp in the account database
(for the current user) that tells me when the user last read items in the
aggregated database.
This works as designed, but I don't have detailed control. If the user opens
the page where new items are listed and reads on of the items (and don't reset
the timestamp), that item won't be removed from the list.
This is evident when I want to have a function in my page that alerts the user
if there is new content of a specific kind (for example: "1 new articles on
cooking"). That function will report that until the user has reset the
timestamp (by visiting the 'what's new?' page that lists all new articles). I
can't mark just this article as 'read'.
So, what options do I have? Well, each item have an ID, so if I should keep
track of read/unread I should base that on the IDs in the aggregation database.
Looking at how newsreaders (specifically those that make use of a .newsrc file)
do it, they keep track of series of ID's, like "12,14-67,69" - which in my case
could mean that the user has read the items with ID 13 and 68.
The aggregation database looks something like this:
ID | Kind | Headline | Original ID
------+-------------+-------------------------------+------------
1 | article | Home made pie | 23
2 | article | Hamburgers a'plenty | 24
3 | forum | Anyone likes strawberries? | 298
4 | comments | Re: Home made pie | 67
Get the idea? The ID is the id in the aggregated database, the kind is from
what original database the content came from and the original ID is the id in
that database
So, if I go and read "Hamburgers a'plenty", it should perhaps update my profile
to say "1,3-4" or somesuch to note that I have read id number 2. Or perhaps I
should just keep track of all the IDs I have read? The aggregate database keeps
content around for about a month, which could mean thousands of items.
I am guessing that a MySQL query that looked like this:
"select * from aggregate where id not in(1,2,3,4,5,6,7,8.....1678)"
would be bad.
So, I am wondering how YOU would have done - Or are you already doing this in
one way or the other? I'm just venting here and hoping that someone will come
with good suggestions on how to solve this in an efficient manner.
One way - I suppose - would be to make on SQL query that fetches all the
(potentially thousands) of ID's and all the headlines and puts them in an array
and then I run that array in a PHP function that filters out items based on the
"1,4-7,12-78" filter. I would also have to build PHP functions to maintain
these lists, but that's a minor problem.
Anyway, any thoughts or suggestions are welcome.
--
Sandman[.net]
Navigation:
[Reply to this message]
|