ROWNUM不起作用;试图获取SQL查询中特定行范围的信息

时间:2013-09-02 19:07:16

标签: php sql pdo

我有一些代码可以计算SQL查询的行数,然后执行另一个查询来获取最后四行的信息。我使用了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

我想仅获取最后四行($query->rowCount()-4)的信息,但我无法通过某个updateno阈值进行选择。如果用户删除了某行,则无法正确使用A_I列来确定行号。

另外,我尝试过以下方法:

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

虽然这会产生预期效果,但我仍然不确定为什么ROWNUM不起作用。

1 个答案:

答案 0 :(得分:1)

您需要了解AUTO_INC内容的含义。它被称为唯一标识符,并且有一个原因。 “唯一”表示其他任何行都不应具有相同的标识符。

然而,它与任何枚举完全无关。所以 -

  

我有一个名为'updateno'的自动增量列,对应于行号。

这就是你做错了。

事实上,你根本不需要这样的领域。如果你想要枚举你的领域 - 在飞行中做。如果您需要标识符 - 请使用常规名称 - "id"

对于任何“rownum”功能,您需要另一个mysql运算符,即LIMIT