MediaWiki:如何获取用户最近编辑的 N 篇文章?
Posted
技术标签:
【中文标题】MediaWiki:如何获取用户最近编辑的 N 篇文章?【英文标题】:MediaWiki: how to get the last N edited articles by a user? 【发布时间】: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。
【问题讨论】:
【参考方案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 篇文章?的主要内容,如果未能解决你的问题,请参考以下文章
Linux 各种软件的安装-mediawiki + wordpress篇