Note sure what you want really. Its not too clear..
If you want to write a rating script in PHP, then what you'll have to do is.
Write a database table to hold the "item" being rated and its rating.
A simple table say item_ratings, will have the columns: id, item_id, item_type, item_name, item_rating.
NOTE: This is a generic table, which allows you to add any item that can be rated.
For example:
If you're adding a rating for a script that has the id of 2 in the db table it is listed, you just add using mysql like such: INSERT INTO item_ratings SET item_id = 2, item_type = 'script', item_name = 'Example PHP script'
Another example:
If you're adding a user to be rated, and the user_id is 4 you can do is as such: INSERT INTO item_ratings SET item_id = 4, item_type = 'user', item_name = 'Joe'
Then you'll have to create a html page (form) to rate the Items in your rating database table.
The form will then send the rating of the user to your php script and your php script will simply add this rating to your item_ratings table.
First you'll have to insert the new rating into the table.
The SQL would look like:
SELECT item_rating from item_ratings WHERE id = [id]; WHERE [id] is the id of the item being rated.
(if it doesnt exist, you can insert a row for the rating... )
If it exists, then update is.
UPDATE item_ratings SET item_rating = [new rating];
When I first thought of this problem, I thought it would be simple to add a new rating. It would be just one database entry for each Item being rated, and then each time there is a new rating, you just get the old average, and sum it with the new rating, divide by 2 and you have the new rating...
but I realized that:
pseudo code: average(a, b, c) != average( average(a, b), c);
So you cannot have just one entry in the database and keep the database normalized. You'd either have to create a new table just to link item_ratings with each rating made by a user.
It could say have the columns, item_ratings_id, rating.
And in item_ratings instead of having a column item_rating, you could make it avg_rating.
That way you can sum up all the ratings, then divide by the number of ratings to get the average.
The other way is to break normalization of your database and just have all past ratings stored in the column item_rating as TEXT.