Проблемы с PHP и MySQL - PullRequest
       4

Проблемы с PHP и MySQL

0 голосов
/ 14 января 2010

Я пытаюсь подсчитать, сколько раз определенная статья была оценена, например, сколько раз 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;
    }
}

1 Ответ

1 голос
/ 14 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...