【问题标题】:SQL INNER JOIN LIMIT RESULTS WHERE ID UNIQUE And Date most RECENTSQL INNER JOIN LIMIT RESULTS WHERE ID UNIQUE 和 Date most RECENT
【发布时间】:2017-10-18 21:45:45
【问题描述】:

我是 SQL 新手,正在处理一个 select 语句,该语句应该返回一个表结果,如下所述。目标是为每个存在的 ThreadID 返回一个表,其中每个 ThreadID 具有与被查询的 CatID 匹配的 CatID,然后过滤结果/限制结果,以便仅返回最近的帖子并返回基于排序的结果创建日期:

修改创建日期以使我希望从每个可能的行返回的日期更明显(Most RecentDate where 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`

)

【问题讨论】:

  • 您能提供表格的ddl吗?是否有任何您应该在连接中使用的常用列?
  • strtolower($thread->title);
  • 我们需要查看ma_Threads和ma_Posts表的定义来调试SQL。请添加到问题中。
  • ma_Threads AS mat INNER JOIN ma_Posts AS map ON mat.CatID = '$catID' 应该有其他的东西,比如AND mat.CatID=map.CatID(或者它们有共同的列)。你必须告诉它这两个表是如何相互关联的。否则,您将获得比预期更多的记录。
  • 您必须向我们展示每个表中的列。那么它应该很容易

标签: php mysql sql join


【解决方案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

【讨论】:

  • 它不起作用 :( LastCreated 应该是 DateAdded。数据来自两个表,两个表都有 ThreadID、PostID、CatID,我需要获取 Title
  • 很抱歉添加评论 - 我正在编辑并且遇到了我不知道存在的五分钟限制。 ---错误如下'查询错误(1064):第16行'WHERE ma_Threads.CatID ='1' ORDER BY ma_Posts.DateCreated DESC'附近的语法错误' - 我尝试在没有DESC的情况下运行它,仍然得到错误。我在运行时更改了 LastCreated 应该是 DateCreated,因为那是我想要引用的表。
  • 不幸的是它没有用。我收到此错误:查询中的错误 (1054):“字段列表”中的未知列“ma_Threads.ID”。我试图修改它改变 ma_Threads.ThreadID 但这对我不起作用
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2021-06-18
    • 2016-04-28
    • 1970-01-01
    • 2022-12-02
    相关资源
    最近更新 更多