作为我正在从事的项目的一部分,我一直在一个网站上工作,用户可以在该网站上添加/编辑不同页面上的内容。
当前,当某人将内容部分添加到页面时,它会被添加到带有“日期修改”列和唯一的contentID列的“内容”表中。但是,当有人去编辑此条目时,我将在“ content”表中获取该ContentID的信息,并使用此信息在“ changehist”表中创建一个新条目(以跟踪内容条目的更改历史记录)。之后,我将使用新内容及其编辑日期更新内容表。
“我的内容”表包含以下列:
ContentID, Heading, Content, DateModified, UserID
ChangeHist表包含以下内容:
HistID, ContentID, Heading, Content, DateModified, UserID
我被要求做的是有一个部分,显示最近添加的内容(过去3个星期),但不显示最近更新的内容(一年前添加的内容,但上周更新了)。我目前正在使用以下查询来执行此操作:
SELECT content.*
FROM content
WHERE
(NOT EXISTS
(SELECT 1
FROM changehist
WHERE changehist.ContentID = content.ContentID))
AND content.DateModified > NOW() - INTERVAL 3 WEEK
ORDER BY content.DateModified DESC
我的问题是,如果在3个小时前添加内容,并在2个小时前对内容进行了修改,并且使用当前查询,则该条目不会显示在MYSQL结果中。
是否有一种方法可以在单个查询中获取此信息,还是我必须使用两个单独的查询(每个表一个),然后将两个结果合并到php中?
答案 0 :(得分:0)
您必须添加一个条件才能获取所有新插入的内容。
SELECT
A.*
FROM
(SELECT ContentID, Heading, Content, DateModified, UserID
FROM Content
WHERE DateModified > NOW() - INTERVAL 3 WEEK
UNION ALL
SELECT ContentID, Heading, Content, DateModified, UserID
FROM ContentHist
WHERE DateModified > NOW() - INTERVAL 3 WEEK) A
ORDER BY A.UserID, A.ContentID, A.DateModified DESC;