我正在尝试计算某篇文章被评分的次数,例如我的成员对users_articles_id
3
评分了多少次。
我也试图计算某篇文章的分数,例如users_articles_id
3
与ratings
数据库相关ratings_id
评分点应该是共13个。
我很想知道我是否做得对,因为对我而言看起来都错了?我希望有人可以帮我解决这个问题吗?我的代码到底应该在哪里?
我正在使用PHP和MySQL吗?
这是我的MySQL表
CREATE TABLE articles_grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
ratings_id INT UNSIGNED NOT NULL,
users_articles_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE ratings (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
points FLOAT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
数据库输入
articles_ratings
id ratings_id users_articles_id user_id date_created
1 3 2 32 2010-01-13 02:22:51
2 1 3 3 2010-01-13 02:23:58
3 2 3 45 2010-01-13 02:24:45
的评分
id points
1 10
2 3
3 5
这是我正在尝试解决的PHP代码。
// function to retrieve rating
function getRating(){
$sql1 = "SELECT COUNT(*)
FROM articles_ratings
WHERE users_articles_id = '$page'";
$result = mysql_query($sql1);
$total_ratings = mysql_fetch_array($result);
$sql2 = "SELECT COUNT(*)
FROM ratings
JOIN ratings ON ratings.id = articles_ratings.ratings_id
WHERE articles_ratings.users_articles_id = '$page'";
$result = mysql_query($sql2);
$total_rating_points = mysql_fetch_array($result);
if(!empty($total_rating_points) && !empty($total_ratings)){
// set the width of star for the star rating
$rating = (round($total_rating_points / $total_ratings,1)) * 10;
echo $rating;
} else {
$rating = 100;
echo $rating;
}
}
答案 0 :(得分:1)
我觉得这里有几个问题。
1)您正在定义一个名为articles_grades的表,而不是在您的代码中定义articles_ratings。 2)为什么articles_grades和rating需要在不同的表中?这些表之间存在一对一的对应关系。 3)您需要在第二个查询中进行求和(点)。 4)您可以将两个查询组合到一个查询中。
如果你不改变架构,我会这样做:
<?php
mysql_connect('localhost','root','fake123123');
mysql_select_db('test');
$result = mysql_query('SELECT users_articles_id,count(*),sum(r.points)
FROM articles_grades ag,ratings r
WHERE ag.ratings_id = r.id
GROUP BY users_articles_id');
if (!$result)
die('invalid');
else{
echo '<table><tr><th>Article Id</th><th>#Ratings</th><th>#Points</th></tr>';
$a = mysql_fetch_row($result);
while($a){
echo '<tr><td>'.implode('</td><td>',$a).'</td></tr>';
$a = mysql_fetch_row($result);
}
echo '</table>';
}
?>
您可以将其作为CGI脚本运行。它应该返回一个结果表。
如果有帮助,请告诉我。