Добавить столбец точек на основе идентификатора из той же таблицы MySQL - PullRequest
0 голосов
/ 02 августа 2011

ОК, база данных выглядит так (перечислены только используемые столбцы):

Table Name: race_stats
Columns: race_id, user_id, points, tournament_id

Table Name: user
Columns: user_id, driver

Table Name: race
Columns: race_id, race_name

Table Name: tournament
Columns: tournament_id, tournament_name

Это мой текущий запрос:

$query = "

SELECT user.user_id, user.driver, race_stats.points, race_stats.user_id, 
   SUM(race_stats.points) AS total_points "." 
FROM user, race_stats, tournament, race "." 
WHERE race.race_id=race_stats.race_id 
   AND user.user_id=race_stats.user_id 
   AND tournament.tournament_id=race_stats.tournament_id 
GROUP BY driver 
ORDER BY total_points DESC 
LIMIT 0, 15

";

Хорошо, запрос работает, но он добавляет их всех для всех доступных рас из столбца race_stats.race_id в виде общего количества очков. Я разбил свой мозг до неузнаваемости, чтобы исправить это, но я просто не могу найти решение, которое мне нужно. Я уверен, что это должно быть легко исправить, но я просто не могу получить это. Любая помощь с благодарностью.

/////////////////// РЕДАКТИРОВАНИЕ С СЫРЬЯМИ *

INSERT INTO `race_stats` (`id_race`, `race_id`, `user_id`, `f`, `s`, `race_interval`, `race_laps`, `led`, `points`, `total_points`, `race_status`, `tournament_id`, `driver`, `tournament_name`) VALUES

(1, 1, 4, 1, 4, '135.878', 60, '2', 180, 0, 'Running', 1, 'new_driver_5', ''),
(2, 1, 2, 2, 2, '-0.08', 60, '22', 175, 0, 'Running', 1, 'new_driver_38', ''),
(3, 1, 5, 3, 5, '-11.82', 60, '2', 170, 0, 'Running', 1, 'new_driver_94', ''),
(4, 2, 2, 1, 15, '138.691', 29, '6', 180, 0, 'Running', 2, 'new_driver_38', ''),
(5, 2, 15, 2, 9, '-16.12', 29, '8*', 180, 0, 'Running', 2, 'new_driver_44', ''),
(6, 2, 8, 3, 11, '-2:03.48', 29, '0', 165, 0, 'Running', 2, 'new_driver_83', ''),

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

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Просто разместите здесь решение для полноты:

SELECT user.driver, race_stats.race_id, 
   SUM(race_stats.points) AS total_points "." 
FROM user, race_stats "." 
WHERE user.user_id=race_stats.user_id 
GROUP BY user.driver, race.race_id
0 голосов
/ 02 августа 2011

Вот запрос, который вы хотите (отформатированный для удобства чтения):

SELECT
    u.driver,
    SUM(rs.points) AS total_points 
FROM user u
LEFT JOIN race_stats rs on rs.user_id = u.user_id
GROUP BY 1;

Преимущество использования внешнего объединения (т. Е. LEFT JOIN) состоит в том, что драйверы, у которых нет статистики, все еще получают строку, но сnull как total_points.

ps Я не знаю, что такое использование "." в вашем запросе, поэтому я удалил его.

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