我在从MySQL调用并获得我需要的东西时继续遇到问题。我有两个名为项目和条目的表,我想要做的是获取最新的时间戳条目。 SQL查询如下:
SELECT
projects.ProjectLogo, projects.ProjectLink, projects.ProjectDescription,
entries.EntryNum, entries.Votes, entries.Views, entries.Update
FROM
projects
LEFT JOIN entries
ON projects.ProjectID = entries.ProjectID
AND projects.Media = 'image'
AND projects.Type = 'fan-art'
GROUP BY
projects.ProjectID
ORDER BY
entries.Update DESC
问题是我得到了结果但没有得到最新的条目,我使用了MAX(entries.Update),但它不起作用。有什么建议?为什么不起作用?
答案 0 :(得分:0)
您可以使用子查询为表Update
上的每个ProjectID
获取最新的entries
。然后子查询的结果将连接回两个连接语句,提示它将匹配两列:ProjectID
和Update
。
SELECT projects.ProjectLogo,
projects.ProjectLink,
projects.ProjectDescription,
entries.EntryNum,
entries.Votes,
entries.Views,
entries.Update
FROM projects
INNER JOIN entries
ON projects.ProjectID = entries.ProjectID
INNER JOIN
(
SELECT a.ProjectID, MAX(a.Update) max_val
FROM entries a
GROUP BY a.ProjectID
) b ON b.ProjectID = entries.ProjectID AND
b.max_val = entries.Update
WHERE projects.Media = 'image' AND
projects.Type = 'fan-art'
ORDER BY entries.Update DESC
答案 1 :(得分:0)
您必须将连接限制为仅包含最新输入日期的记录(行)。 如果条目中的pk按时间顺序增加,则可以使用它。
Select p.ProjectLogo, p.ProjectLink, p.ProjectDescription,
e.EntryNum, e.Votes, e.Views, e.Update
From projects p
Left Join entries e
On e.EntryId =
(Select(Max(entryId) from entries
where ProjectID = p.ProjectID)
Where p.Media = 'image'
And p.Type = 'fan-art'
Group By p.ProjectID
Order By e.Update Desc
否则,您需要一个双嵌套子查询
Select p.ProjectLogo, p.ProjectLink, p.ProjectDescription,
e.EntryNum, e.Votes, e.Views, e.Update
From projects p
Left Join entries e
On e.EntryId =
(Select entryId from entries
where ProjectID = p.ProjectID
And update =
(Select max(update) From entries
Where ProjectID = p.ProjectID))
where p.Media = 'image'
And p.Type = 'fan-art'
Group By p.ProjectID
Order By e.Update Desc
答案 2 :(得分:0)
尝试使用子查询获取最新条目:
select projectId, max(`update`) as lastUpdate
from entries
group by projectId
现在,使用此子查询来获取所需内容:
select ...
from
projects as p
inner join entries as e on p.projectId=e.projectId
inner join (
select projectId, max(`update`) as lastUpdate
from entries
group by projectId) as me on e.`update`=me.lastUpdate
希望这有助于你