Из-за необходимости объединения нескольких таблиц в одном запросе я не могу использовать SQL_CALC_FOUND_ROWS
(или LIMIT
) для внешнего запроса (число будет больше, чем ожидалось).
Вот идеальный запрос, если MySQL поддерживает использование SQL_CALC_FOUND_ROWS
в подзапросах:
SELECT events.*, bands.*
FROM events
LEFT JOIN bands ON events.event_id = bands.event_id
WHERE e.event_id IN (
SELECT * FROM (
SELECT SQL_CALC_FOUND_ROWS e.event_id
FROM events
WHERE events.date > NOW()
ORDER BY events.date ASC LIMIT 0, 25
) ALIAS
)
ORDER BY events.date ASC
Этот вопрос предлагает создать таблицу с псевдонимами, но я не уверен, что смогу это сделатьс подготовленными инструкциями PDO.
Я попытался это сделать, но получил ошибку синтаксического анализа, поскольку FOUND_EVENTS интерпретировалось как (несуществующее) имя столбца:
$st1 = $pdo->prepare("(SELECT SQL_CALC_FOUND_ROWS e.event_id
FROM events
WHERE events.date > NOW()
ORDER BY events.date ASC LIMIT 0, 25
) AS FOUND_EVENTS");
$st2 = $pdo->prepare("SELECT events.*, bands.*
FROM events
LEFT JOIN bands ON events.event_id = bands.event_id
WHERE e.event_id IN (
FOUND_EVENTS
)
ORDER BY events.date ASC");
$st1->execute();
$st2->execute();
Я бы предпочел придерживаться подготовленных операторовесли возможно, но любое рабочее решение было бы замечательно!