0

我有一个带有 ID 的简单文章表。我想从最近的 10 个结果中得到最高和最低的 id。例如,如果有 11 个 id,则结果应为 2 和 11,如果有 4 个 id,则结果应为 4 和 1,依此类推。我使用 PHP PDO 语句。

$aid = $DBH->prepare("SELECT id FROM articles ORDER BY id DESC LIMIT 10"); 
$aid->execute(); 
$row = $aid->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
$lowest_article_id = $row[0];
$row = $aid->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_FIRST);
$highest_article_id = $row[0];

如果有 11 条记录,上面将始终返回 11,如果有 10 条记录,则返回 10。因此,查询忽略了查询的PDO::FETCH_ORI_LAST一部分。

谢谢

4

3 回答 3

0

您可以使用 SQL 中的 MIN 和 MAX 函数来实现这一点。

SELECT MIN(ID) min_ID, MAX(ID) max_ID
FROM
(
    SELECT id FROM articles ORDER BY id DESC LIMIT 10
)
于 2013-02-03T13:24:24.370 回答
0

我做了一些检查,从文档中听起来这应该可行。准备 sql 时需要启用光标滚动。

$aid = $DBH->prepare("SELECT id FROM articles ORDER BY id DESC LIMIT 10", array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); 
$aid->execute(); 
$row = $aid->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
$lowest_article_id = $row[0];
$row = $aid->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_FIRST);
$highest_article_id = $row[0];

话虽如此,它不适合我:/

我做了更多的阅读/测试,发现了这两个错误报告:
https://bugs.php.net/bug.php?id=34625(虽然这是从 2005 年开始的,但我几乎可以肯定 MySQL 中有游标功能这些天)。
https://bugs.php.net/bug.php?id=57623

于 2013-02-03T16:30:19.630 回答
-1

或者在sql中使用union命令

SELECT min(id) id FROM articles UNION SELECT max(id) id FROM articles;

此语句返回您需要的两个 id。

于 2013-02-03T14:11:33.447 回答