Сортировать во время цикла или SQL-запроса, зациклив переменную - PullRequest
1 голос
/ 15 февраля 2012

Я действительно застрял и долго искал, но безуспешно.

В любом случае, у меня есть эта формула, известная как Байесовская оценка: (WR) = (v ÷ (v + m)) × R + (m ÷ (v + m)) × C

И у меня есть три таблицы базы данных: лица, отзывы, рейтинги.

Таблица лиц довольно проста, но ради этого вопроса она имеет только одно поле: ID

Таблица отзывов имеет id, personID, описание , где personID - это идентификатор человека.

Таблица рейтингов имеет id, personID, reviewID, ratingX, ratingY, ratingZ , где person - это идентификатор человека, а reviewID - это идентификатор обзора. ratingX / Y / Z - это три разных рейтинга для человека, и на моей странице показано среднее из трех чисел.

ФОРМА, КОТОРАЯ ИХ СПИСОК , однако, сортирует их по формуле Байесовской оценки. Я не знаю, как это сделать, и это кажется мне непосильным, так как вы не можете ORDER BY $ bayesian_formula или что-то в этом роде. Сценарий выглядит примерно так:

<?php
$result = $db->query("SELECT * FROM persons");
$m =; //SQL to get average number of reviews of all persons
$c =; //SQL to get average rating of all persons
while( $row = $result->fetch_array() ){

$r =; //SQL to get average ratings of person
$v =; //SQL to get total number of reviews of person

$formula = ($v / ($v+$m)) * $r + ($m / ($v+$m)) * $c;

$result2 = $db->query("SELECT * FROM ratings ORDER BY $formula");
    while( $row2 = $result2->fetch_array() ){

    $result3 = $db->query("SELECT * FROM persons WHERE id='$row2[person]'");
    $row3 = $result3->fetch_array();

    echo $row2['description']."<br> rating: ".round( ($row['ratingX'] + $row['ratingY'] + $row['ratingZ']) / 3 );

    }

}
?>

$ формула возвращается к взвешенному рейтингу результата базы данных на каждой итерации.

Очевидно, что это не правильно. Как бы я сделал эту работу? Должен ли я пересмотреть весь сценарий? Фактическая намного длиннее и детальнее.

редактирование:

sqls:

$c_query=$db->query("SELECT ((ratingX + ratingY + ratingZ) / 3) as avg_rate FROM ratings");
$c_ = $c_query->fetch_array();
$c = $c_['avg_rate'];

$m_query=$db->query("SELECT COUNT(id) AS count FROM ratings");
$m_ = $m_query->fetch_array();
$m = $m_['count'];

$v_query=$db->query("SELECT COUNT(id) AS count FROM ratings WHERE person='$row[id]'");
$v_ = $v_query->fetch_array();
$v = $v_['count'];

$r_query=$db->query("SELECT ((ratingX + ratingY + ratingZ) / 3) as avg_rate FROM ratings WHERE person='$row[id]'");
$r_ = $r_query->fetch_array();
$r = $r_['avg_rate'];

1 Ответ

0 голосов
/ 15 февраля 2012

Вы можете использовать ПРОЦЕДУРА СОЗДАНИЯ

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