Прежде всего, пожалуйста, не используйте этот уродливый неявный синтаксис соединения. Это сбивает с толку и подвержено ошибкам.
Измените это на:
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 для тестирования.