【问题标题】:How to sort sql query without primary key?如何在没有主键的情况下对 sql 查询进行排序?
【发布时间】:2011-04-30 15:06:48
【问题描述】:

我有一个名为 items_tags 的表,它有两列:

  • article_id
  • tag_id

(has_and_belongs_to_many 关联)(我用 php 实现了这个)

我想找到最后进入db的article_id,所以我尝试这样做:

SELECT `article_id` FROM `articles_tags`  ORDER BY `article_id` DESC LIMIT 1

第一个问题是我不想按article_id排序,第二个问题是它不起作用。

我想是因为我在这个表中没有主键。

【问题讨论】:

  • 是的,我在文章表中创建了_at 列。你的意思是搜索最后一篇有标签的文章?好主意:)
  • 您可以按任何列排序,无论它是否是主键。 :-)
  • 转念一想,这不是一个好主意,因为没有必要找到我最后标记的文章
  • 这两列是如何定义的?
  • @Lieven, int(11) 没有额外的东西。

标签: mysql has-and-belongs-to-many


【解决方案1】:

一个简单的 MAX 就足够了:

select max(article_id) from articles_tags

更新:

要获取最后标记的文章:

select article_id from articles_tags where tag_id = 
  (select max(tag_id) from articles_tags)

【讨论】:

  • 这个解决方案不需要找到我输入的最后一行:/
  • 如果 article_id 为表中的每条新记录增加,则为真
  • @Yarin:你想要最后插入的文章还是最后标记的文章?
  • @Morten 这没有必要——事实上,我希望这个表中每个 article_id 有几个条目(否则,这个表没有多大意义)。
  • @Frank:我想要最后一篇带标签的文章。
【解决方案2】:

您需要一个额外的列...自动生成的数字或 DaytIme 字段。然后就可以排序了。否则,您永远无法假设获得正确的记录。

更新:不一定需要是id字段

【讨论】:

  • +1 为什么这被否决了? AFAIK,这是唯一正确的答案。数据库引擎对最后插入的记录是什么 没有任何概念。如果您需要此类信息,请按照 Morten 的建议添加时间戳或 ID。
  • +1 似乎是正确的答案(我想我误解了 OP)。
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多