MySQL 有趣的搜索

标签 mysql

我有两个表,applicationsapplicationRevisions,结构如下:

applications (id, time, user, views)
applicationRevisions(id, application, time, user, name, description)

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

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

我有一个解决方法;将当前名称存储为 applications 中的字段,编辑应用程序时,像往常一样将该行添加到 applicationRevisions 中,但随后更新名称applications 行中。

有更好的方法吗?

最佳答案

因此,您希望在其中搜索名称来获取应用程序,然后获取该应用程序的最新版本,该应用程序可能不再具有该名称。对于子查询来说这当然是可能的,但是对于某些修订版碰巧具有相同名称的应用程序,您打算怎么办?

如果应用程序表可以保存名称和描述,就会更加清晰。老实说,这可能只是一个表,因为应用程序中的时间和用户可能与每个应用程序的第一个修订版所使用的时间和用户相同。仅留下 View 字段,该字段可能位于仅包含 applications_views(应用程序、 View ) 的表中。

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

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”的每个应用程序的最新版本中的所有字段。

关于MySQL 有趣的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3948553/

相关文章:

mysql - SQL执行时的Case表达式

mysql - SQL 在创建表中引用外键错误

mysql - 设计具有循环引用的关系数据库

php - 如何正确使用 JSON 从 php 文件中获取 MYSQL 数据库的行数?

mysql - 完全加入 Mysql 失败

Mysql - 从两个不同的查询添加动态列

java - 将数据从一个表插入到另一个表时出错

php - 在数据库中存储语言词典

mysql - 从 WaveMaker Online 连接到 Google Cloud SQL

mysql - 一种更好的方法来吸引下订单数量最多和最少的客户