0

ID を持つ単純な記事テーブルがあります。最新の 10 件の結果から最高 ID と最低 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];

そうは言っても、私には向いていません:/

もっと読んだりテストしたりして、次の 2 つのバグ レポートを見つけまし
。日々)。
https://bugs.php.net/bug.php?id=57623

于 2013-02-03T16:30:19.630 に答える
-1

または、SQLでユニオンコマンドを使用します

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

このステートメントは、必要な 2 つの ID を返します。

于 2013-02-03T14:11:33.447 に答える