【问题标题】:Merging and sorting two tables合并和排序两个表
【发布时间】:2012-05-26 09:54:34
【问题描述】:

我有两张桌子。

带有列 ID、forumID、标题、内容、unixtime 的“threads”

“cmets”包含列 ID、threadID、内容、unixtime

我想做一个 mysql 查询,根据它们的 unixtime 对这两个表中的所有行进行排序,但也不显示相同的“threadID”两次。

以下查询将合并两个表并对它们进行排序,但我无法删除重复的线程。我尝试了一些 GROUP BY 和 DISTINCT,但没有运气。

(SELECT unixtime, ID, threadID FROM comments)
UNION
(SELECT unixtime, ID, forumID FROM threads)
ORDER BY unixtime DESC

它是为了展示一个论坛的首页,因此让同一个帖子出现多次是没有意义的。

编辑:我想同时显示最新的 cmets 和最新的线程。

【问题讨论】:

    标签: mysql


    【解决方案1】:
    SELECT unixtime, ID, type, type_id
    FROM (( SELECT unixtime, ID, 'comment' AS type, threadID, forumID
            FROM (  SELECT unixtime, ID, threadID
                    FROM comments
                    ORDER BY unixtime DESC) AS h
            GROUP BY threadID)
            UNION ALL
          ( SELECT unixtime, ID, 'thread', ID, forumID
            FROM threads)
            ORDER BY unixtime DESC) AS h2
    GROUP BY threadID
    ORDER BY unixtime DESC
    

    我改变了一些东西。我想你想知道它是论坛还是线程 ID?

    【讨论】:

    • 这几乎行得通!唯一的问题是同一个线程会从“threads”表中出现一次,从“cmets”表中出现一次。有什么办法可以避免这种情况?
    • 有效!虽然我只需要在底部添加ORDER BY unixtime DESC。谢谢!
    【解决方案2】:

    这将帮助您仅获取唯一的线程 ID

    (SELECT forumID, ID, unixtime FROM threads)
    UNION
    (SELECT distinct(threadID), ID, max(unixtime) FROM comments GROUPBY threadID)
    ORDER BY unixtime DESC
    

    【讨论】:

    • 这几乎行得通!唯一的问题是同一个线程会从“threads”和表中出现一次,从“cmets”表中出现一次。有什么办法可以避免这种情况?
    • 您只想要论坛的一个主题和该主题的一个评论。我对吗??
    • 我只希望线程显示一次。上面的 Robins 解决方案完美运行!
    【解决方案3】:

    如果您没有加入的钥匙,简单的解决方案:

       Select DISTINCT tbl.unixtime from
        (
        (SELECT unixtime, ID, threadID FROM comments)
        UNION
        (SELECT unixtime, ID, forumID FROM threads)
        ORDER BY unixtime DESC))
        As tbl
    

    【讨论】:

    • 我需要的不仅仅是unixtime,所以我试过了:Select DISTINCT tbl.unixtime, tbl.ID, tbl.tID from ( (SELECT unixtime, ID, threadID as tID FROM comments) UNION (SELECT unixtime, ID, forumID as tID FROM threads) ORDER BY unixtime DESC LIMIT 0, 100 ) as tbl 但是还是有重复的:(
    猜你喜欢
    • 2015-05-12
    • 2014-05-29
    • 2011-01-21
    • 1970-01-01
    相关资源
    最近更新 更多