首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL有趣的搜索

MySQL有趣的搜索
EN

Stack Overflow用户
提问于 2010-10-16 18:40:56
回答 2查看 58关注 0票数 0

我有两个表,applicationsapplicationRevisions,它们是结构化的:

代码语言:javascript
复制
applications (id, time, user, views)
applicationRevisions(id, application, time, user, name, description)

后者保存应用程序页面的“修订”,包含标题和描述,因此它是一对多关系。显示应用程序页面时,将选择具有匹配application ID的最新applicationRevisions行。

但是,我无法知道某个特定时间是否存在具有某个名称的应用程序,因为以前的修订版本可能具有不同的名称,并且该名称不会存储在applications表中。

我有一个变通办法;将当前名称作为字段存储在applications中,在编辑应用程序时,像往常一样将行添加到applicationRevisions,但随后更新applications行中的name

有没有更好的方法来做这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-16 20:44:55

因此,您想要在中搜索一个名称以获取应用程序,然后获取该应用程序的最新版本,该应用程序可能不再具有该名称。对子查询来说,这当然是可能的,但是对于某些修订恰好具有相同名称的应用程序,您将如何处理呢?

如果应用程序表可以保存名称和描述,则会更清楚。老实说,这可能只是一个表,因为应用程序中的时间和用户可能与每个应用程序的第一个修订版相同。只剩下views字段,它可能只存在于applications_views (application, views)表中。

无论如何,如果您希望避免对模式进行重大更改,并且应用程序之间的名称混淆是可以的,则可以进行如下查询:

代码语言:javascript
复制
select * from applications join applicationRevisions
on (applications.id=applicationRevisions.application)
where applicationRevisions.id in 
   (select max(id) 
    from applicationRevisions 
    where name = 'foobar' 
    group by application);

如果我猜对了关系,这将为您提供使用'foobar‘名称的每个应用程序的最新版本的所有字段。

票数 1
EN

Stack Overflow用户

发布于 2010-10-16 21:10:48

如果我在这里遗漏了什么,请纠正我,每个应用程序条目至少必须有一个applicationRevision,对吗?

为什么不使用外键约束呢?将applicationRevision表的应用程序字段设置为外键。使用id而不是名称来标识应用程序。使名称成为修订的属性。

假设您想搜索一个名为"wxyz“的应用程序,所以您执行一个

代码语言:javascript
复制
select id,application from applicationRevision where name="wxyz" order by time DESC LIMIT 1;

这将为您提供应用程序id。您可以执行连接并从单个查询中获取应用程序字段

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3948553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档