0

我有一些代码可以计算 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不起作用。

4

1 回答 1

1

你需要理解那个东西的含义AUTO_INC。它被称为唯一标识符,这是有原因的。“唯一”意味着任何其他行都不应该具有相同的标识符。

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

我有一个名为“updateno”的自动递增列,它对应于行号。

这就是你做错了。

事实上,你根本不需要这样的字段。如果您想枚举您的字段 - 随时进行。如果您想要一个标识符- 为此使用常规名称 -"id"

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

于 2013-09-02T19:20:01.497 回答