Rating Script - SELECT item, (totalrate / nrrates)

Place for comments, problems, questions, or any issue related to the JavaScript / PHP scripts from this site.
David
Posts:15

Rating Script - SELECT item, (totalrate / nrrates)

Hi people,
I'm reasonably new to PDO and have just completed a GNU project for myself that uses your rating script, from: https://coursesweb.net/php-mysql/rating- ... jax-php_s2
And I'm stuck with this either returning multiple arrays or nonsensical data?
This is the db that I'm testing:

Code: Select all

item 	totalrate 	nrrates 	
rt_35 	3 	1
rt_11 	3 	1
rt_25 	4 	1
rt_34 	2 	1
rt_33 	4 	1
rt_32 	6 	1
rt_17 	5 	1
rt_36 	6 	1
rt_12 	4 	1
rt_22 	5 	1
rt_24 	4 	1
rt_20 	6 	1
rt_11 	3 	1
rt_25 	6 	1
rt_33 	6 	1
rt_17 	6 	1
rt_32 	6 	1
rt_36 	6 	1
rt_35 	7 	1
And I've kicked this around for hours and got nowhere?
Can you help me to sort it out so that is returns some sensible data that I can process as a list?
Thanks.

Code: Select all

        $stmt = $database->prepare("SELECT `item`, (`totalrate` / `nrrates`) AS `rank` FROM `rtgitems` ORDER BY (`totalrate` / `nrrates`) DESC LIMIT 10");
            $stmt->execute();
                $row = $stmt->fetchAll();
        {
            foreach ($row as $row2)
        {

            $name2 = htmlEsc($row2['item']);
        }
    $name2 = str_replace("rt_", "", $name2);
echo ''.$name2.'';
} 

Admin Posts:805
Hi David
I didn't understand what is the problem, related to the SQL query or PHP? What results returns your code, and what results you want to get?
- Trying to guess, maybe you want a SQL query like this:

Code: Select all

SELECT `item`, (SUM(`totalrate`) / SUM(`nrrates`)) AS `rank` FROM `rtgitems` GROUP BY item ORDER BY rank DESC LIMIT 10
This query applied to this table:

Code: Select all

item | totalrate | nrrates
rt_35 	3 	1
rt_11 	3 	1
rt_32 	6 	1
rt_35 	7 	1
Results:

Code: Select all

 item 	rank 	
rt_32 	6.0000
rt_35 	5.0000
rt_11 	3.0000

David Posts:15
And now it's working fine! :mrgreen:
One it was the wrong select and on top of that the wrong query.
This fixed it: But I still have one question.
Can we drop the 6.0000 for example to 6.00 - or are the extra digits required for rounding percentages?

Code: Select all

$stmt = $database->query("SELECT `item`, (SUM(`totalrate`) / SUM(`nrrates`)) AS `rank` FROM `rtgitems` GROUP BY item ORDER BY rank DESC LIMIT 10");
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo ''.$row['item'].' '.$row['rank'].'<br />'; //etc...
} 
Output:

Code: Select all

rt_36 6.0000
rt_32 6.0000
rt_2 6.0000
rt_17 5.5000
rt_20 5.0000
rt_22 5.0000
rt_31 5.0000
rt_12 5.0000
rt_33 5.0000
rt_25 5.0000
Thanks for the new SELECT btw - You may want to add it to your instructions for noobs like me.

Admin Posts:805
To format a number in php, use the number_format() function.
Example:

Code: Select all

$nr = '8.0680';
$nr = number_format($nr, 2, '.', '');
echo $nr;  // 8.07 
In your code:

Code: Select all

echo $row['item']. ' '. number_format($row['rank'], 2, '.', '') .'<br />'; 

David Posts:15
Brilliant! And your help has been fantastic.
And I even made a mini-banner for you for my Credit's List"
Unless you have something better?

Admin Posts:805
About the errors you included in your previous post (and I deleted them), it was of a bug in phpbb, i try to fix it; but I viewed the attachment on server.
Thank you for the mini-banner yor made, I not have something better.
I'm glad the rating script works and is useful for you.

David Posts:15
The script does everything that one could ask for and with a little imagination one can construct it to do just about anything that anyone would want. And I'm glad you did it and made it available. :)

In the next few weeks I should have my work on-line and you can see it in action. I'll also upgrade my profile with a few extras.

Thanks again for your help - And I'll spend a bit of time here seeing what else I can "Steal" ;)