MAX In WHERE предложение вернуть все записи

0

Я пытаюсь вернуть MAX gameweek доступного match определенного round, для этого я использовал функцию MAX, но я получил все matches gameweeks раунда, вместо этого я должен получить только matches которые имеют MAX gameweek,

Это мой запрос:

  SELECT m.id, m.round_id, m.gameweek
  FROM 'match' m
  LEFT JOIN competition_rounds r ON m.round_id = r.id
  LEFT JOIN competition_seasons s ON r.season_id = s.id
  LEFT JOIN competition c ON c.id = s.competition_id
  WHERE 1 AND m.status = 5 AND m.round_id = 488 OR m.round_id = 489 OR m.round_id = 490 OR m.round_id = 491 
  AND m.gameweek = (SELECT MAX(gameweek) FROM 'match' WHERE (round_id = 488) OR (round_id = 489) OR (round_id = 490) OR (round_id = 491))

результат:

[
    {
        "id": "1979011",
         "round_id": "488",
         "gameweek": "1",
    },
    {
        "id": "1979012",
        "round_id": "488",
        "gameweek": "2",
    },
    {
        "id": "1979013",
        "round_id": "489",
        "gameweek": "1",
    },
    {
        "id": "1979014",
        "round_id": "489",
        "gameweek": "2",
    },

Я ожидаю вместо этого только матч, который имеет id: 1979012, 1979014. Почему я получаю все матчи gameweeks?

  • 0
    x AND y OR z - это то же самое, что ( x AND y ) OR z , а не x AND ( y OR z )
Теги:
pdo

1 ответ

0
Лучший ответ

Я думаю, вам просто нужны скобки. Или еще лучше, используйте in:

WHERE 1 AND
      m.status = 5 AND
      m.round_id IN (488, 489, 490, 491) AND
      m.gameweek = (SELECT MAX(m2.gameweek)
                    FROM 'match' m2
                    WHERE m2.round_id IN (488, 489, 490, 491)
                   )

Для меня совершенно непонятно, почему вы объединяете столько таблиц вместе. Вы ссылаетесь только на столбцы из match, так что это будет единственная таблица, необходимая в запросе.

  • 0
    Спасибо за ответ, в вопросе, который я расшифровал, полный запрос выглядит следующим образом: pastebin.com/RMKP29Pd Соединение сделано для получения деталей из другой таблицы, во всяком случае, я использовал ваше решение, но получаю точный результат, Может быть, вы можете увидеть то, что я не могу? Еще раз спасибо
  • 0
    ладно, мой плохой, я добавил m.round_id IN (488, 489, 490, 491) и теперь, кажется, работает, но у меня есть еще одна проблема, возвращенные совпадения соответствуют только 488 идентификатору раунда, другой раунд отсутствует ..
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню