Как вычислить значение из двух MySQL столбцов базы данных для использования в предложении WHERE - PullRequest
0 голосов
/ 14 февраля 2020

У меня запрос, который начинается как ...

SELECT session_id, time, quantity, teacher, sum(time+(quantity*60*60*60)) AS end FROM my_table WHERE end > 1582214400 

Я получаю исключение PDO ...

column not found: 1054 Unknown column 'end' in 'where clause'

Почему PDO / MySQL дает мне это ошибка? Каков правильный синтаксис для вычисления end , чтобы я мог использовать его в предложении WHERE?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Нельзя использовать псевдоним из select в where предложении. Вместо этого используйте having следующим образом:

SELECT session_id, time, quantity, teacher, sum(time+(quantity*60*60*60)) AS end FROM my_table having end > 1582214400 
0 голосов
/ 14 февраля 2020

Дженс точно на цели, что вы не можете использовать псевдоним end, как вы это сделали. Есть еще несколько способов написания запроса. Поскольку это было слишком долго для комментария, я добавил ответ.

Вот альтернативный способ написания запроса. Обратите внимание, что я явно использовал предложение group by.

SELECT
  session_id,
  time,
  quantity,
  teacher,
  sum(time+(quantity*60*60*60)) AS end
FROM my_table
GROUP BY
  session_id,
  time,
  quantity,
  teacher 
HAVING sum(time+(quantity*60*60*60)) > 1582214400 

или вы можете использовать подзапрос, который может быть неэффективным.

SELECT * FROM (

  SELECT
    session_id,
    time,
    quantity,
    teacher,
    sum(time+(quantity*60*60*60)) AS end
  FROM my_table
  GROUP BY
    session_id,
    time,
    quantity,
    teacher 

) main
WHERE end > 1582214400
...