0

SQL クエリで行数をカウントし、別のクエリを実行して最後の 4 行の情報を取得するコードが少しあります。を使用しましROWNUMたが、機能しません。

$newscount = $db->query("
    SELECT *
        FROM news
");
$counter = $newscount->rowCount();
$grabnewsmsg = $db->query("
    SELECT *
        FROM news
        WHERE ROWNUM >= $counter-4 -- this particular part doesn't owrk
        ORDER BY updateno DESC -- an A_I column
");

問題が発生している特定の領域についてコメントしました。A_I各行に一意の識別子が必要なので、その部分は問題ありROWNUMませんが、SOに関する他の質問/回答に加えて、他のサイトで読んだことにもかかわらず機能しません。エラーを返しますcolumn rownum does not exist

最後の 4 行 ( ) だけの情報を取得したいのですが$query->rowCount()-4、特定のしきい値で選択できませんupdateno。ユーザーが行を削除した場合、そのA_I列を適切に使用して行番号を決定することはできません。

さらに、私は以下を試しました:

$grabnewsmsg = $db->query("
    SELECT *
        FROM news
        ORDER BY updateno DESC
        LIMIT 0,4
");

これにより望ましい結果が得られますが、なぜ機能しないのかはまだわかりROWNUMません。

4

1 に答える 1

1

そのことの意味を理解する必要がありますAUTO_INC。これは一意の識別子と呼ばれ、理由があります。「一意」とは、他の行が同じ識別子を持つべきではないことを意味します。

それでも、列挙とはまったく関係ありません。そう -

行の番号に対応する「updateno」というタイトルの自動インクリメント列があります。

これはあなたが間違っていることです。

実際のところ、そのようなフィールドはまったく必要ありません。フィールドを列挙したい場合は、その場で行います。識別子が必要な場合- これには従来の名前を使用してください -"id"

「rownum」機能については、別のmysqlオペレーター、つまりLIMITが必要です

于 2013-09-02T19:20:01.497 に答える