一個別名錶由於需要將多個表在單個查詢,我不能對外部查詢使用SQL_CALC_FOUND_ROWS
(或LIMIT
)(數量會高於預期)。使用多個PDO預處理語句
這裏是理想的查詢,如果子查詢中使用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
This question建議創建別名的表,但我不知道如果我能做到這一點與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();
我寧願堅持預處理語句,如果有可能,但是任何可行的解決方案將是大!
奇怪的是,性能會受到影響。雖然性能對我的問題並不完全至關重要(結果將被緩存),但這似乎是最簡單的解決方案。謝謝! – nathanb