【问题标题】:MediaWiki: how to get the last N edited articles by a user?MediaWiki:如何获取用户最近编辑的 N 篇文章?
【发布时间】:2009-07-16 15:00:56
【问题描述】:

使用 PHP 和 MySQL,我正在将一个站点与一个基于 MediaWiki 的 wiki 集成,以便该站点中的用户个人资料有一些关于他们在 wiki 中的贡献的统计信息。

我想在一个命名空间中显示用户最近编辑的 3 篇文章(主要文章,id 0),不重复,以及指向它们的链接

为了做到这一点,我或多或少做了以下事情:

// getting the article IDs
$db->query("SELECT DISTINCT rev_page
        FROM revision r, page p
        WHERE r.rev_page = p.page_id
            AND p.page_namespace = 0
            AND rev_user = {$userId}
        ORDER BY r.rev_timestamp DESC
        LIMIT 3");
// then the IDs are stored in $last_edited_ids...

// getting the names of the articles
$db->query("SELECT page_title
        FROM page WHERE page_id
        IN (" . implode($last_edited_ids, ',') . ")");

问题是我不确定它是否正确,虽然它大部分时间都有效:对于某些用户,旧文章显示为最后编辑,但第二和第三结果是正确的。这让我觉得我一定做错了什么,但 SQL 不是我的强项......

提示:如果您不了解 MediaWiki 数据库方案(它相当自动解释),您可以查看它here

【问题讨论】:

    标签: php sql mysql mediawiki


    【解决方案1】:

    “DISTINCT rev_page”子句使您的 SQL 失效。它将 DISTINCT 应​​用于所有 rev_page(page.page_id's),因此每页将获得一个随机 rev_id。

    试试这个查询,它将您的两个查询合二为一:

    SELECT DISTINCT p.page_title
    FROM revision r, page p
    WHERE r.rev_page = p.page_id
    AND p.page_namespace = 0
    AND rev_user = {$userId}
    GROUP by p.page_title
    ORDER BY MAX(r.rev_id) DESC
    LIMIT 3
    

    【讨论】:

    • 我现在明白我的错误了。还有一次,如果它看起来太复杂,那就错了 :) 很明显,每个 'rev_id' 都与表中的另一个不同,所以它是随机选择一个并导致问题。我不会考虑以这种方式使用 ORDER !完美的解决方案!
    【解决方案2】:

    我不熟悉 MediaWiki 的实现,但我你应该 ORDER BY rev_id 以外的其他东西。也许不能保证按时间顺序分配 ID。 revision 表中不是有某种date 字段吗?

    那么你可以:

    ... ORDER BY r.date DESC ...
    

    【讨论】:

    • 哎呀,对不起,这是我正在做的一些测试的错字:) 现在我正在使用 ... ORDER BY r.rev_timestamp ... 但结果是相同的,所以它没有看起来不像是由此引起的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2019-11-12
    相关资源
    最近更新 更多