【发布时间】:2011-11-07 03:21:10
【问题描述】:
由于需要在单个查询中连接多个表,我无法在外部查询中使用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
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();
如果可能的话,我宁愿坚持准备好的陈述,但任何可行的解决方案都会很棒!
【问题讨论】:
标签: php mysql pdo subquery prepared-statement