MediaWiki 1.16.0 - 在phpmyadmin中选择当前文章

时间:2011-06-07 19:45:51

标签: mysql sql mediawiki

我正在尝试获取Mediawiki 1.16.0中当前/最新文章的所有文章。我需要在phpMyadmin中执行此操作并根据这些结果进行转储。

我的SQL:

SELECT 
  page.page_title, page.page_latest
  , revision.rev_id, revision.rev_text_id
  , text.old_id, text.old_text 
FROM page, revision, text 
WHERE rev_id = page_latest AND rev_text_id = old_id

我也得到了图片名称但不是问题。我觉得上面的SQL没有得到最新版本的文章。

如果有办法不在结果中显示图像名称和重定向,那么它也会有所帮助。

1 个答案:

答案 0 :(得分:2)

首先请不要使用那种丑陋的隐式连接语法。这令人困惑且容易出错。

将其更改为:

SELECT 
  page.page_title, page.page_latest
  , revision.rev_id, revision.rev_text_id
  , text.old_id, text.old_text 
FROM page
INNER JOIN revision ON (rev_id = page_latest)
INNER JOIN text ON (rev_text_id = old_id)

现在您可以看到原因:它正在获取所有页面。没有where子句,只有join个子句。

这是数据库布局:http://upload.wikimedia.org/wikipedia/commons/b/b7/MediaWiki_database_schema_1-17_%28r82044%29.png

以下是各种表格中字段的说明:
http://www.mediawiki.org/wiki/Manual:Database_layout

修改查询

SELECT 
  p.page_title, p.page_latest
  , MAX(revision.rev_id) as rev_id, revision.rev_text_id
  , text.old_id, text.old_text 
FROM page p
INNER JOIN revision r ON (r.rev_id = p.page_latest)
INNER JOIN `text` t ON (r.rev_text_id = t.old_id)
WHERE p.page_is_redirect = 0 AND p.page_namespace <> 6  /*NS_IMAGE = 6*/
GROUP BY p.page_latest 
ORDER BY p.page_title

这会过滤掉重定向,并排除namespace = ns_image

所在的网页

我不是100%肯定,因为我没有MediaWiki来测试。