2010-01-14 2 views
0

Я пытаюсь подсчитать, сколько раз определенная статья была оценена, например, сколько раз было users_articles_id3 было оценено моими членами.Проблемы с PHP и MySQL

Я также пытаюсь подсчитать очки для определенной статьи, например users_articles_id3 связан с базой данных 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) 
); 



Input Database

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; 
    } 
} 
+1

Когда вы говорите, что пытаетесь «исправить» этот код, в чем проблема, с которой вы сталкиваетесь? – AaronLS

+0

Непонятно, в чем проблема, вы просто говорите «исправить». Можете ли вы подробно описать проблему, связанную с указанным выше кодом. Сказать, что все выглядит неправильно, немного обобщенно. – Camsoft

ответ

1

Ну, я думаю, здесь есть несколько вопросов.

1) Вы определяете таблицу articles_grades, а не articles_ratings, как в вашем коде. 2) Почему articles_grades и рейтинги должны быть в отдельных таблицах? Между этими таблицами существует взаимно однозначное соответствие. 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. Он должен вернуть таблицу результатов.

Дайте мне знать, если это поможет.

Смежные вопросы