MediaWiki:如何获取用户最近编辑的 N 篇文章?

Posted

技术标签:

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

使用 phpmysql,我正在将一个站点与一个基于 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。

【问题讨论】:

【参考方案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 ... 但结果是相同的,所以它没有看起来不像是由此引起的问题。

以上是关于MediaWiki:如何获取用户最近编辑的 N 篇文章?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 MediaWiki 工具栏图标?

Linux 各种软件的安装-mediawiki + wordpress篇

MediaWiki:页面编辑仅允许创建者或经批准

MediaWiki 上的 GraphViz 点在编辑后被拉长

MediaWiki:允许用户在私人 wiki 上创建帐户

通过 API 从 mediawiki 页面获取文本内容