我的目的是为我的lastmod
文件写下我批准文章的最后修改日期(sitemap.xml
)。这些数据有两种可能性。
col_article_id
列添加到我的评论表中,该表显示了
相关文章在文章表中的ID 我有两张桌子:
comments.col_article_id
将评论与相关评论相关联
文章)在我尝试下面的查询后,
select tb_articles.col_approvaldate, tb_comments.col_approvaldate
from tb_articles, tb_comments
where tb_articles.col_status ='approved' AND tb_comments.col_status ='approved' AND tb_articles.col_id=tb_comments.col_article_id
我的问题是:
1 - 我需要一些,就好像在select max( tb_articles.col_approvaldate, tb_comments.col_approvaldate)
2 - 如果我有n个批准的文章没有任何批准的评论和批准的评论批准的文章,那么我应该有n + m个结果行,每行有1列。但是目前,我有m行,每行有2列。
所以我知道我的方式非常糟糕。
我还搜索了“ mysql每组最新行”关键字。但这就是我毕竟能够到达的那一点。
这是我的第一次join
体验。你能纠正我吗?最好的问候
答案 0 :(得分:1)
试试这个:
select
tb_articles.id,
ifnull(
max( tb_comments.col_approvaldate),
tb_articles.col_approvaldate
) as last_approved
from tb_articles
left join tb_comments
on tb_articles.col_id=tb_comments.col_article_id
and tb_comments.col_status ='approved'
where tb_articles.col_status ='approved'
group by 1;
答案 1 :(得分:0)
我是否正确理解默认情况下会创建文章的tb_comments
条记录?情况应该不是这样 - 如果没有评论,那里就不应该有记录。如果有,您输入的默认日期是什么?空值?另外tb_comments.col_status
对我来说似乎是多余的 - 如果你有tb_comments.col_approvaldate
那么它在那个日期就被批准了,而你根本不需要地位。
此查询可能适用于您(如果我理解您的表结构,则评论AND
不应更改内容):
SELECT
a.col_id AS 'article_id',
IFNULL(MAX(c.col_approvaldate), a.col_approvaldate)
FROM
tb_articles a
LEFT JOIN tb_comments c ON a.col_id = c.col_article_id #AND c.col_status ='approved'
WHERE
a.col_status ='approved'
GROUP BY a.col_id