MediaWiki:如何获得用户最后N个编辑过的文章?

时间:2009-07-16 15:00:56

标签: php sql mysql mediawiki

使用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

2 个答案:

答案 0 :(得分:1)

“DISTINCT rev_page”子句将关闭SQL。它将DISTINCT应用于所有rev_page(page.page_id),因此每页将获得一个随机的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

答案 1 :(得分:0)

我不熟悉MediaWiki的实现,但我猜测你应该ORDER BYrev_id以外的其他内容。也许不能保证按时间顺序分配ID。 date表中是否存在某种revision字段?

然后你可以:

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