MediaWiki 1.16.0 - В phpmyadmin выберите текущие статьи - PullRequest
0 голосов
/ 07 июня 2011

Я пытаюсь получить все статьи, которые являются текущими / последними статьями в 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 Ответ

2 голосов
/ 08 июня 2011

Прежде всего, пожалуйста, не используйте этот уродливый неявный синтаксис соединения. Это сбивает с толку и подвержено ошибкам.

Измените это на:

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 для тестирования.

...