mysql - 从先前查询的结果中提取最新版本的文章
问题描述
我有以下查询:
SELECT e_c.*, c.name, j.status, j.version, j.articleId, j.title FROM assetcategory AS c
INNER JOIN assetentries_assetcategories AS e_c
ON c.categoryId = e_c.categoryId AND c.name = 'news'
INNER JOIN assetentry AS e
ON e.entryId = e_c.entryId
INNER JOIN journalarticle AS j
ON j.resourcePrimKey = e.classPK
AND e.classNameId = (SELECT classNameId FROM classname_ WHERE value = 'com.liferay.portlet.journal.model.JournalArticle')
AND j.companyId= e.companyId
WHERE j.status = 0
它返回news
. journalarticles
从结果中,我需要为每个articleId
. 例如,假设有一篇文章有 4 个版本,即使标题不同,它也是同一篇文章,因为它会有相同的articleId
. 因此,对于每个独特的articleId
,我需要最新的version
. 我怎样才能做到这一点?
解决方案
将连接添加到子查询,以查找每篇文章的最新版本:
SELECT e_c.*, c.name, j1.status, j1.version, j1.articleId, j1.title
FROM assetcategory AS c
INNER JOIN assetentries_assetcategories AS e_c
ON c.categoryId = e_c.categoryId AND c.name = 'news'
INNER JOIN assetentry AS e
ON e.entryId = e_c.entryId
INNER JOIN journalarticle AS j1
ON j1.resourcePrimKey = e.classPK AND
e.classNameId = (SELECT classNameId FROM classname_
WHERE value = 'com.liferay.portlet.journal.model.JournalArticle') AND
j.companyId = e.companyId
INNER JOIN
(
SELECT articleId, MAX(version) AS max_version
FROM journalarticle
WHERE status = 0
GROUP BY articleId
) j2
ON j1.articleId = j2.articleId AND j1.version = j2.max_version;
加入j2
上述别名的子查询背后的基本思想是将结果集限制为每篇文章的最新版本。我们不一定要更改查询的其余部分。
推荐阅读
- php - 由于我的查询,我的网站加载速度很慢
- codeigniter - 如何在codeigniter中将数组从一个控制器发送到另一个控制器
- mysql - 无法连接到 mySQL,因为无法识别服务器时区值“GMT Summer Time”
- php - 未捕获的 Facebook\WebDriver\Exception\UnknownCommandException: POST ../element//click while click Google Search button using Selenium and IE 8
- swift4 - 尝试发布数据时出现错误“无法读取数据,因为它的格式不正确”
- shiny - 使用 `pickerInput` 大小选项提高应用程序速度
- gradle - 如何修复“在以下任何来源中都找不到插件”
- javascript - 动态快照测试
- c++ - 在模板类中为纯虚函数提供默认实现
- android - 多个dex文件定义Lcom/android/volley/Request$Method