Это действительно 2 вопроса в одном, но я постараюсь сделать это как можно дольше.MySql пытается улучшить производительность запросов, но получил ошибку в столбце
Я показал свой первоначальный запрос другу, который сказал мне, что производительность может быть улучшена в дальнейшем с помощью sub select (с использованием MySql здесь).
К сожалению, я не мог получить его запрос на работу, так как я был Error Code: 1054 Unknown column 'e.id' in 'where clause'
Его запрос ниже: был бы признателен, если кто-то говорит мне, почему он не может распознать e.id
.
SELECT e.id AS event_id, er.name AS event_name, er.revision AS revision, er.start_date AS event_dates
FROM `events` AS e
INNER JOIN
(
SELECT event_id, revision, start_date
FROM event_revisions
WHERE YEAR(start_date) = YEAR(CURDATE())
AND revision = (
SELECT MAX(er_tmp.revision)
FROM event_revisions AS er_tmp
WHERE er_tmp.approved = 1
AND e.id = er_tmp.event_id
)
) AS er ON (e.id = er.event_id)
INNER JOIN member_events AS me ON (me.event_id = e.id)
WHERE
e.enabled = 1 AND
e.deleted = 0
GROUP BY event_id
ORDER BY event_dates
Это мой исходный запрос:
SELECT e.id AS event_id, er.name AS event_name, er.revision AS revision, er.start_date AS event_dates
FROM `events` AS e
INNER JOIN event_revisions AS er ON (e.id = er.event_id)
INNER JOIN member_events AS me ON (me.event_id = e.id)
WHERE
e.enabled = 1 AND
e.deleted = 0 AND
er.revision = (
SELECT MAX(er_tmp.revision)
FROM event_revisions AS er_tmp
WHERE er_tmp.approved = 1
AND e.id = er_tmp.event_id
)
AND YEAR(er.start_date) = YEAR(CURDATE())
GROUP BY event_id
ORDER BY event_dates
Второй вопрос: почему его запрос будет быстрее, чем у меня?
Любой ввод очень ценен.
Попробуйте использовать кавычку (') для имен столбцов и таблиц. Также он не распознается, потому что «e.id» находится в другом запросе (он находится в подзапросе) – Dor
hmm, поэтому я могу получить event_id из другого запроса? например 'event_revisions.event_id = er_tmp.event_id' –
Я не думаю, что вы можете. Сначала выполняется самый глубокий подзапрос, чтобы создать временную таблицу, из которой данные могут быть извлечены родительскими запросами. – Dor