1

我想知道如何用新数据更新我的数据库表,但最新数据位于顶部,唯一 ID 从 1 开始。这就是我的意思:

以第一个插入查询为例,插入3个文章主题:

id        article
 1        firstNews
 2        secondNews
 3        thirdNews

然后下次我运行 Cron 作业检查新文章时,例如出现两篇新文章,我希望这两篇新文章在表的开头,如下所示:

id        article
 1        NewArticle1
 2        NewArticle2
 3        firstNews
 4        secondNews
 5        thirdNews

希望这是有道理的。这可能是一种不好的方法,我想我可以有一个带有插入日期()的列,然后从 OrderBy 日期中取出数据,但它必须是一种更简单的方法。我认为这将是最容易从表中输出最新数据的方法......

如果我按 DESC 排序,它会在 NewArticle1 之前输出 NewArticle2,这会破坏目的......

id       article
 1       firstNews
 2       secondNews
 3       thirdNews
 4       NewArticle1
 5       NewArticle2

所以通过 DESC,id 5 将是第一个输出......我真的希望有办法解决这个问题......

4

4 回答 4

4

你不应该这样做。只需在末尾插入,要获取最新文章,请使用查询:

SELECT * FROM articles ORDER BY id DESC;

一般来说:不要让数据适合您的查询,而是让查询适合您的数据。id 不是位置或数字,它唯一标识该行数据。

于 2013-03-28T14:33:21.480 回答
0

您可以使用日期列并对其进行排序。或者只是按 ID 降序排序。

就地更改 PK 很少是一个好主意。尤其重要的是,您可能有使用该 PK 的子表,也许还有历史表

请注意,SQL 表没有隐式顺序:您始终需要 ORDER BY 来保证结果集的顺序

于 2013-03-28T14:34:34.367 回答
0

您应该添加另一列专门用于排序,例如日期。并在其上添加一个INDEX

然后查询变为:

SELECT * 
FROM news
ORDER BY newsdate DESC

最新消息最先出现

如果有两个新闻项目可以同时发布,您可能希望包含第二个排序:

ORDER BY newsdate DESC, id ASC
于 2013-03-28T14:42:01.927 回答
0

这根本不应该是你的担心。

ID绝不是一个数字,也不是一个位置。它只是一个唯一标识符

意味着每个数据库行都永远坚持它的 id。虽然您想将您的“唯一” id 分配给每条新消息,但这是没有意义的。

因此,只需使用通常的自动递增 id 并选择它ORDER BY id DESC以首先获取最新条目。

于 2013-03-28T14:50:58.120 回答