我无法弄清楚如何让这个子查询工作以获取该行的最新日期。
SELECT Thread_Heading.*, Thread_Articles.*, Thread_ArticlesPost.*
FROM Thread_Heading
LEFT JOIN Thread_Articles
ON Thread_Articles.Thread_Article_Head_id=Thread_Heading.Thread_Head_id
LEFT JOIN
(
SELECT Thread_ArticlesPost.*
FROM Thread_ArticlesPost
ORDER BY Thread_ArticlePost_DT DESC
) Thread_ArticlesPost
ON Thread_ArticlesPost.Thread_ArticlePost_Article_id=Thread_Articles.Thread_Article_id
WHERE Thread_Head_Level = '5'
GROUP BY Thread_Heading.Thread_Head_id
ORDER BY Thread_ArticlePost_DT DESC
我需要为每篇Thread文章的最新帖子订购文章发布日期。 相当新的sql和php我只是无法工作这一个任何帮助将不胜感激。
Ť
ABLE: Thread_Heading |
Thread_Head_id
Thread_Head_Name
Thread_Head_Type
Thread_Head_Creator
Thread_Head_Date
Thread_Head_Level
TABLE: Thread_Articles |
Thread_Article_id
Thread_Article_Head_id
Thread_Article_Creator
Thread_Article_DT
Thread_Article_Level
Thread_Article_Type
Thread_Article_Title
TABLE: Thread_ArticlesPost |
Thread_ArticlePost_id
Thread_ArticlePost_Head_id
Thread_ArticlePost_Article_id
Thread_ArticlePost_Creator
Thread_ArticlePost_DT
Thread_ArticlePost_Level
Thread_ArticlePost_Type
Thread_ArticlePost_Title
Thread_ArticlePost_Content
我需要像这样显示日期:
Head Name | Article title | ORDER BY LATEST ArticlePost DT | ArticlePost Creator
我使用左连接的原因是即使没有文章或文章回复也能得到左边的数据。
感谢帮助。
使用它来显示数据感谢Blue
SELECT *
从
(SELECT th.Thread_Head_Name,
TA ,
tp1.maxdate,
TP2。
来自Thread_Heading th
LEFT JOIN Thread_Articles ta
ON th.Thread_Head_id = ta.Thread_Article_Head_id
LEFT JOIN
(
SELECT max(Thread_ArticlePost_DT)maxDate,
Thread_ArticlesPost。*
来自Thread_ArticlesPost
GROUP BY Thread_ArticlePost_Article_id
)tp1
ON tp1.Thread_ArticlePost_Article_id = ta.Thread_Article_id
LEFT JOIN Thread_ArticlesPost tp2
ON tp1.Thread_ArticlePost_Article_id = tp2.Thread_ArticlePost_Article_id
AND tp1.maxdate = tp2.Thread_ArticlePost_DT
在哪里th.Thread_Head_Level ='5'
ORDER BY tp1.maxdate DESC)m
GROUP BY Thread_Head_Name
ORDER BY Thread_ArticlePost_DT DESC
答案 0 :(得分:3)
如果没有看到完整的表格模式,您将需要执行与此类似的操作:
SELECT th.*, ta.*, tp.*
FROM Thread_Heading th
LEFT JOIN Thread_Articles ta
ON th.Thread_Head_id = ta.Thread_Article_Head_id
LEFT JOIN
(
SELECT max(Thread_ArticlePost_DT) maxDate, Thread_ArticlesPost.*
FROM Thread_ArticlesPost
GROUP BY Thread_ArticlePost_Article_id
) Thread_ArticlesPost tp
ON tp.Thread_ArticlePost_Article_id=ta.Thread_Article_id
WHERE Thread_Head_Level = '5'
GROUP BY th.Thread_Head_id
ORDER BY tp.maxdate DESC
根据您的编辑,以下内容应返回您想要的数据:
SELECT th.Thread_Head_Name,
ta.Thread_Article_Title,
tp1.maxdate,
tp2.Thread_ArticlePost_Creator
FROM Thread_Heading th
LEFT JOIN Thread_Articles ta
ON th.Thread_Head_id = ta.Thread_Article_Head_id
LEFT JOIN
(
SELECT max(Thread_ArticlePost_DT) maxDate,
Thread_ArticlesPost.Thread_ArticlePost_Article_id
FROM Thread_ArticlesPost
GROUP BY Thread_ArticlePost_Article_id
) tp1
ON tp1.Thread_ArticlePost_Article_id=ta.Thread_Article_id
LEFT JOIN Thread_ArticlesPost tp2
ON tp1.Thread_ArticlePost_Article_id = tp2.Thread_ArticlePost_Article_id
AND tp1.maxdate = tp2.Thread_ArticlePost_DT
WHERE th.Thread_Head_Level = '5'
ORDER BY tp1.maxdate DESC
编辑#2,根据您的评论,我认为以下查询应解决任何剩余问题:
SELECT th.Thread_Head_id,
th.Thread_Head_Name,
ta.Thread_Article_Title,
tp.Thread_ArticlePost_Creator,
tap.MaxPostDate
FROM Thread_Heading th
LEFT JOIN
(
SELECT max(ta.Thread_Article_DT) MaxArticleDate,
ta.Thread_Article_Head_id,
max(tp.Thread_ArticlePost_DT) MaxPostDate
FROM Thread_Articles ta
LEFT JOIN Thread_ArticlesPost tp
ON ta.Thread_Article_id = tp.Thread_ArticlePost_Article_id
GROUP BY Thread_Article_Head_id
) tap
ON th.Thread_Head_id = tap.Thread_Article_Head_id
LEFT JOIN Thread_Articles ta
ON tap.Thread_Article_Head_id = ta.Thread_Article_Head_id
AND tap.MaxArticleDate = ta.Thread_Article_DT
LEFT JOIN Thread_ArticlesPost tp
ON tap.MaxPostDate = tp.Thread_ArticlePost_DT
WHERE th.Thread_Head_Level = '5'
ORDER BY MaxPostDate desc
答案 1 :(得分:0)
根据您的最新帖子,您的帖子外侧不必有GROUP BY
条款已经分组在子查询中。试试这个,
SELECT a.*, b.*, c.*
FROM Thread_Heading a
LEFT JOIN Thread_Articles b
ON b.Thread_Article_Head_id = a.Thread_Head_id
LEFT JOIN Thread_ArticlesPost c
ON c.Thread_ArticlePost_Article_id = b.Thread_Article_id
LEFT JOIN
(
SELECT Thread_ArticlePost_Article_id, MAX(Thread_ArticlePost_DT) maxDate
FROM Thread_ArticlesPost
GROUP BY Thread_ArticlePost_Article_id
) d ON d.Thread_ArticlePost_Article_id = b.Thread_Article_id AND
c.Thread_ArticlePost_DT = d.maxDate
WHERE Thread_Head_Level = '5'
-- GROUP BY a.Thread_Head_id
ORDER BY Thread_ArticlePost_DT DESC