Добавление дополнительного столбца в таблицу - PullRequest
1 голос
/ 02 июля 2019

Мне нужна ваша помощь, потому что я понятия не имею, как я могу это сделать:

У меня есть три таблицы MySQL:

pcs_clubs id, короткое имя

шт_candidates id, id_compet, id_club, id_season

pcs_matchs id, id_candidate_dom, id_candidate_ext, id_day, date_day, buts_dom, buts_ext, id_set_id_season, id_season*

Пример данных:

шт_клубов

id   shortname
1    Barcelona
2    Real Madrid
3    Sevilla
4    Deportivo
5    Espanyol
6    Real Zaragoza

шт_кандидатов

id   id_compet   id_club  id_season
1     1            1            1
2     1            2            1
3     1            3            1
4     1            4            1
5     1            5            1
6     1            6            1

шт_матч

+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| id | id_candidate_dom | id_candidate_ext | id_day | date_match | buts_dom | buts_ext | id_season | id_compet | validation |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 1  | 1                | 6                | 1      | 2015-11-12 | 0        | 3        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 2  | 2                | 5                | 1      | 2015-11-12 | 2        | 2        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 3  | 3                | 4                | 1      | 2015-11-12 | 2        | 1        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 4  | 6                | 2                | 2      | 2015-11-17 | 3        | 1        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 5  | 4                | 1                | 2      | 2015-11-17 | 1        | 1        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 6  | 5                | 3                | 2      | 2015-11-17 | 1        | 2        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 7  | 3                | 6                | 3      | 2015-11-24 | 2        | 0        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 8  | 2                | 4                | 3      | 2015-11-24 | 3        | 1        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+
| 9  | 1                | 5                | 3      | 2015-11-24 | 4        | 1        | 1         | 1         | 1          |
+----+------------------+------------------+--------+------------+----------+----------+-----------+-----------+------------+

Следующий запрос MySQL успешно генерирует таблицу лиг желаемого соревнования и сезона:

SELECT
  shortname AS Team, Sum(P) AS P,Sum(W) AS W,Sum(D) AS D,Sum(L) AS L,
  SUM(F) as F,SUM(A) AS A,SUM(GD) AS GD,SUM(Pts) AS Pts
FROM(
  SELECT
    id_candidate_dom Team,
    1 P,
    IF(buts_dom > buts_ext,1,0) W,
    IF(buts_dom = buts_ext,1,0) D,
    IF(buts_dom < buts_ext,1,0) L,
    buts_dom F,
    buts_ext A,
    buts_dom-buts_ext GD,
    CASE WHEN buts_dom > buts_ext THEN 3 WHEN buts_dom = buts_ext THEN 1 ELSE 0 END PTS
  FROM pcs_matchs
  UNION ALL
  SELECT
    id_candidate_ext,
    1,
    IF(buts_dom < buts_ext,1,0),
    IF(buts_dom = buts_ext,1,0),
    IF(buts_dom > buts_ext,1,0),
    buts_ext,
    buts_dom,
    buts_ext-buts_dom GD,
    CASE WHEN buts_dom < buts_ext THEN 3 WHEN buts_dom = buts_ext THEN 1 ELSE 0 END
  FROM pcs_matchs WHERE validation=1 AND id_compet=1 AND id_season=1
) as tot
JOIN pcs_candidates t ON tot.Team=t.id_club
JOIN pcs_clubs c ON c.id=t.id_club
GROUP BY Team
ORDER BY SUM(Pts) DESC, SUM(GD) DESC;

Текущий результат:

+------+---------------+---+---+---+---+---+----+-----+------------+
|      | Team          | P | W | D | L | F | A  | GD  | Pts        |
+------+---------------+---+---+---+---+---+----+-----+------------+
| 1    | Sevilla       | 3 | 3 | 0 | 0 | 6 | 2  | 4   | 9pts       |
+------+---------------+---+---+---+---+---+----+-----+------------+
| 2    | Real Zaragoza | 3 | 2 | 0 | 1 | 6 | 3  | 3   | 6pts       |
+------+---------------+---+---+---+---+---+----+-----+------------+
| 3    | Real Madrid   | 3 | 1 | 1 | 1 | 6 | 6  | 0   | 4pts       |
+------+---------------+---+---+---+---+---+----+-----+------------+
| 4    | Barcelona     | 3 | 1 | 1 | 1 | 5 | 5  | 0   | 4pts       |
+------+---------------+---+---+---+---+---+----+-----+------------+
| 5    | Deportivo     | 3 | 0 | 1 | 2 | 3 | 6  | -3  | 1pts       |
+------+---------------+---+---+---+---+---+----+-----+------------+
| 6    | Espanyol      | 3 | 0 | 1 | 2 | 4 | 8  | -4  | 1pts       |
+------+---------------+---+---+---+---+---+----+-----+------------+

Мне бы хотелосьдобавить дополнительный столбец (текущая форма) в таблицу лиги, основываясь на последних 5 матчах каждой команды перед текущей датой.Мне нужно просто добавить одного персонажа к матчам, если команда выиграла, затем W, если ничья, а затем D, если проиграл, то L. (если команда еще не сыграла 5 матчей, то не добавлять персонажа в колонку), как-то такэто:

Желаемый результат:

+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
|   |               |   |   |   |   |   |   |    |      | Form (from newest result to oldest based on date of match) |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
| 1 | Sevilla       | 3 | 3 | 0 | 0 | 6 | 2 | 4  | 9pts | WWW                                 |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
| 2 | Real Zaragoza | 3 | 2 | 0 | 1 | 6 | 3 | 3  | 6pts | LWW                                 |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
| 3 | Real Madrid   | 3 | 1 | 1 | 1 | 6 | 6 | 0  | 4pts | WLD                                 |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
| 4 | Barcelona     | 3 | 1 | 1 | 1 | 5 | 5 | 0  | 4pts | WDL                                 |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
| 5 | Deportivo     | 3 | 0 | 1 | 2 | 3 | 6 | -3 | 1pts | LDL                                 |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+
| 6 | Espanyol      | 3 | 0 | 1 | 2 | 4 | 8 | -4 | 1pts | LLD                                 |
+---+---------------+---+---+---+---+---+---+----+------+-------------------------------------+

https://www.flashscore.com/standings/pvZBCt9T/vHE9SNDE/#live

Заранее спасибо!

ОБНОВЛЕННЫЙ ЗАПРОС (похоже, он работает)

    SELECT
      shortname AS Team, Sum(P) AS P,Sum(W) AS W,Sum(D) AS D,Sum(L) AS L,
      SUM(F) as F,SUM(A) AS A,SUM(GD) AS GD,SUM(Pts) AS Pts, date_day AS dateday, group_concat(match_result ORDER BY date_day DESC)
    FROM(
      SELECT
        id_candidate_dom Team,
        1 P,
        IF(buts_dom > buts_ext,1,0) W,
        IF(buts_dom = buts_ext,1,0) D,
        IF(buts_dom < buts_ext,1,0) L,
        buts_dom F,
        buts_ext A,
        buts_dom-buts_ext GD,
        CASE WHEN buts_dom > buts_ext THEN 3 WHEN buts_dom = buts_ext THEN 1 ELSE 0 END PTS,
        CASE
      WHEN buts_dom > buts_ext THEN 'W'
      WHEN buts_dom = buts_ext THEN 'D'
      WHEN buts_dom < buts_ext THEN 'L'
    END match_result,
        date_day
      FROM pcs_matchs
      UNION ALL
      SELECT
        id_candidate_ext,
        1,
        IF(buts_dom < buts_ext,1,0),
        IF(buts_dom = buts_ext,1,0),
        IF(buts_dom > buts_ext,1,0),
        buts_ext,
        buts_dom,
        buts_ext-buts_dom GD,
        CASE WHEN buts_dom < buts_ext THEN 3 WHEN buts_dom = buts_ext THEN 1 ELSE 0 END,
        CASE
      WHEN buts_dom < buts_ext THEN 'W'
      WHEN buts_dom = buts_ext THEN 'D'
      WHEN buts_dom > buts_ext THEN 'L'
    END match_result,
date_day
      FROM pcs_matchs WHERE validation=1 AND id_compet=1 AND id_season=1
    ) as tot
    JOIN pcs_candidates t ON tot.Team=t.id_club
    JOIN pcs_clubs c ON c.id=t.id_club
    GROUP BY Team
    ORDER BY SUM(Pts) DESC, SUM(GD) DESC

1 Ответ

0 голосов
/ 02 июля 2019

После добавления столбцов date_match и match_result к запросам в UNION добавьте следующий столбец в первом предложении SELECT:

group_concat(match_result ORDER BY date_match DESC)

Для результата матча:

CASE
  WHEN buts_dom > buts_ext THEN 'W'
  WHEN buts_dom = buts_ext THEN 'D'
  WHEN buts_dom < buts_ext THEN 'L'
END match_result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...