2017-10-18 14 views
-1

我是新来的SQL和工作的SELECT语句,应该返回一个表结果如下文档。目标是针对存在的每个ThreadID返回一个表,并且具有匹配被查询的CatID的CatID,然后筛选结果/限制结果,以便只返回最近的帖子并返回基于排序结果的创建日期:SQL内部连接限制结果在哪里ID独特和日期大多数最近

日期创建日期修改,以使其更明显我希望每个可能的行返回的最新日期(最新的日期其中CatID = 1)如果数据存在一张表我可以写这个我认为,但这显然超出了我的理解。

╔══════════╔══════════╦═══════════════╦════════╦═════════════╗ 
║ CatID ║ ThreadID ║ ThreadTitle ║ PostID ║ DateCreated ║ 
╠══════════╬══════════╬═══════════════╬════════╬═════════════╣ 
║ 4  ║  7 ║ Title A ║ 12 ║ most recent ║ 
║ 4  ║  6 ║ Title B ║ 6 ║ most recent ║ 
║ 4  ║  12 ║ Title C ║ 45 ║ most recent ║ 
║ 4  ║  3 ║ Title D ║ 2 ║ most recent ║ 
╚══════════╩══════════╩═══════════════╩════════╩═════════════╝ 

我一直在读通过PHPfreaks,W3Schools的,明显的StackOverflow,并试图使用模型我Adminer结果。我已经学会了一些我之前没有尝试过的连接,但经过几个小时的尝试(6小时)之后,我很乐意寻求帮助。

我的尝试要么没有找到任何东西,要么产生1个结果,要么产生8000+个结果。我的实际测试数据应该有4个结果。

这是我最新的尝试SQL,这是不工作的希望

SELECT 
    mat.ThreadTitle, 
    mat.CatID, 

    map.DateCreated AS "RecentID", 
    map.ThreadID, 
    map.LastUpdated 


    FROM 
      ma_Threads AS mat 
    INNER JOIN 
      ma_Posts AS map 

    ON mat.CatID = '$catID' 

WHERE  `pat.DateCreated(test.marvelchampions)` = (
SELECT MAX(DATE(pat.DateCreated)) 
FROM `pat` 

+2

请问您可以提供ddl表吗?有什么共同的列,你应该在联合使用? – Alex

+1

strtolower($ thread-> title); –

+1

我们需要查看表ma_Threads和ma_Posts的定义来调试SQL。请加上问题。 – Nic3500

回答

1

以下应该工作,假设关于表的定义我的猜测是正确的

SELECT 
    ma_Threads.CatID, 
    ma_Threads.ID AS ThreadID, 
    ma_Threads.ThreadTitle, 
    ma_Posts.ID AS PostID, 
    ma_Posts.LastUpdated 

FROM ma_Threads 
JOIN ma_Posts ON (
    ma_Posts.ID = (
     SELECT MAX(ma_Posts2.ID) 
     FROM ma_Posts ma_Posts2 
     WHERE ma_Posts2.ThreadID = ma_Threads.ID 
    ) 
) 
WHERE ma_Threads.CatID = '$catID' 
ORDER BY ma_Posts.LastUpdated DESC 
+0

它不工作:(LastCreated应该是DateAdded。数据来自两个表,这两个表都有ThreadID,PostID,CatID,我需要获得标题 – Chezshire

+0

对不起,添加评论 - 我正在进行编辑,并遇到了我不知道存在的五分钟限制。---错误内容如下:'查询错误(1064):'WHERE ma_Threads.CatID'= 1'ORDER BY ma_Posts附近的语法错误。 DateCreated DESC'在第16行' - 我试图运行它没有DESC,仍然得到了错误。我改变了LastCreated应该是DateCreated当我跑,因为这是我想参考的表 – Chezshire

+0

不幸的是,它没有工作。错误:查询错误(1054):'字段列表'中的未知列'ma_Threads.ID'。我试图修改它改变马_Threads.ThreadID但这并不适用于我 – Chezshire

0

很难说没有看到你的表。但我最好的猜测是:

SELECT mat.ThreadTitle, 
     mat.CatID, 
     map.DateCreated AS "RecentID", 
     map.ThreadID, 
     MAX(map.LastUpdated) 
FROM ma_Threads AS mat 
INNER JOIN ma_Posts AS map 
ON mat.CatID = map.CatID 
GROUP BY mat.ThreadTitle, mat.CatID, map.DateCreated, map.ThreadID