У меня есть таблица с 4 столбцами, например:
ID - username - rating - solved
БД для сайта-головоломки.ID
- это номер головоломки, поле username
предназначено для пользователя, который решил ее, и solved
- логическое значение, если пользователь решил ее.На главной странице я перечисляю головоломки.Я получаю данные головоломок (из другой таблицы), решенное значение головоломки для вошедшего в систему пользователя, но когда я пытаюсь получить средний рейтинг, оно усредняет одно значение - рейтинг пользователя, зарегистрированного для головоломки,и игнорирует любые другие оценки для головоломки.Можно ли это сделать в одном запросе или только в двух отдельных запросах для рейтингов?Как?
А также, если пользователь не вошел в систему, то есть мне не нужно получать значение solved
из таблицы рейтингов, рейтинги усредняются и все работает нормально.
РЕДАКТИРОВАТЬ: вот код.$ logged, если пользователь вошел в систему, поэтому два верхних запроса работают, а два нижних не работают.
if ($logged) {
$query_recent = "SELECT id, owner, title, hidden, x, y, solved, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` AND `ratings`.`owner_id` = '$username' WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY `id` DESC LIMIT $from, 30";
$query_top = "SELECT id, owner, title, hidden, x, y, solved, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` AND `ratings`.`owner_id` = '$username' WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY average DESC LIMIT $from, 30";
} else {
$query_recent = "SELECT id, owner, title, hidden, x, y, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY `id` DESC LIMIT $from, 30";
$query_top = "SELECT id, owner, title, hidden, x, y, points, AVG(rating) AS average FROM `users`, `cwords` LEFT JOIN `ratings` ON `cwords`.`id`=`ratings`.`cw_id` WHERE `cwords`.`public` = 1 AND `owner` = `username` GROUP BY `id` ORDER BY average DESC LIMIT $from, 30";
};
РЕДАКТИРОВАТЬ 2: я пробовал 2 запроса, но если я попытался выбратьЗначение solved
в отдельном, я не могу упорядочить его по AVG(rating)
, и я возвращаюсь к исходной проблеме.Любая помощь?
$query_top_solved = "SELECT id, solved FROM cwords LEFT JOIN ratings ON `cwords`.`id`=`ratings`.`cw_id` AND `ratings`.`owner_id` = '$username' WHERE `cwords`.`public` = 1 GROUP BY cw_id ORDER BY AVG(rating) DESC LIMIT $from, 30";
Это упорядочивает ее по рейтингу текущего пользователя, единственному.