【发布时间】:2013-09-05 15:04:24
【问题描述】:
这可能是mysql union vs multiple queries 的重复问题,除了问题过于笼统,而且此问题针对特定情况。
首先,我认为有两个选项,哪个更好 表现明智。第一个是使用单独的查询获取上一行和下一行。以下为伪代码:
sql->query("SELECT * FROM tbldata WHERE id < 3 ORDER BY id DESC LIMIT 1");
$prev = sql->getRecord();
sql->query("SELECT * FROM tbldata WHERE id > 3 ORDER BY id LIMIT 1");
$next = sql->getRecord();
另一种解决方案是仅对 UNION 使用一个查询。
sql->query("(SELECT * FROM tbldata WHERE id > 3 ORDER BY id DESC LIMIT 1) UNION
(SELECT * FROM tbldata WHERE id < 3 ORDER BY id LIMIT 1)");
$row = sql->getRecords();
if (count($row) > 1) {
$prev = $row[0];
$next = $row[1];
} elseif (count($row) == 0) {
} elseif ($row[0]->id > 3) {
$next = $row[0];
} else {
$prev = $row[0];
}
哪一个是此类问题的最佳实践?
【问题讨论】:
-
看看 MySQL - 下一个/上一个 ID 与循环 stackoverflow.com/questions/17086267/…