MYSQL Просмотр и суммирование полей - PullRequest
2 голосов
/ 12 февраля 2012

Мне нужна помощь. Я рыскал в Интернете и не смог найти что-то слишком похожее.У меня есть база данных MYSQL для моей лиги гольфа.Мне нужно отобразить турнирную таблицу, создав вид из этой базы данных.В команде 2 человека, мой основной ключ в 'Players' - это 'id', для каждого игрока также есть идентификатор команды (числовое значение 1 - 20, 20 команд), что соответствует их товарищам по команде.По сути, мне нужно представление, содержащее «teamID», оба игрока «LName» (возможно, «LNameA», «LNameB») и сумму поля «два» для двух игроков.Я никогда не суммировал поля от одного человека и другого и не создавал представление в MYSQL.

РЕДАКТИРОВАТЬ:

Я пытался что-то вроде

CREATE 
VIEW standings1
AS SELECT teamID, LName, points
FROM players

, но нужен teamIDбыть primaryKey вида, который будет содержать фамилию каждого игрока и их очки, суммируемые вместе.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Попробуйте это:

create view standings as
  select teamId, group_concat(lname separator ', ') as TeamMembers,
    sum(points) TotalPoints from players
  group by teamId

О, еще одна вещь. Если вы хотите, чтобы имена игроков находились в разных полях (group_concat просто разделяет их запятыми, но это все еще одно поле), вы можете использовать этот запрос:

create view standings as
  select a.teamId, a.lname as player1, b.lname as player2,
  a.points + b.points TotalPoints
  from players a
  join players b ON a.teamId = b.teamId AND a.id >= b.id
  group by a.teamId, a.id
  having count(*) = 2

Таким образом, вы можете лучше играть с именами в PHP, не анализируя ","

1 голос
/ 13 февраля 2012

Если я понимаю структуру вашей таблицы, вам понадобится JOIN против собственной таблицы teamID. Я предполагаю, что teamID относится к команде, а не к идентификатору игрока. Хитрость здесь в том, чтобы соединить две копии таблицы на одном и том же teamID, но там, где идентификаторы игроков не равны. Это должно дать пару игроков на команду.

CREATE VIEW standings AS
(
SELECT
  p1.teamID AS teamID,
  p1.id AS p1id,
  p2.id AS p2id,
  p1.LName AS p1LName,
  p2.LName AS p2LName,
  p1.score + p2.score AS totalScore
FROM
  /* JOIN on matching teamID and non-matching player-id (so you don't get the same player twice) */
  players p1 JOIN players p2 ON p1.teamID = p2.teamID and p1.id <> p2.id
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...