2011-06-07 8 views
0

私はMediawiki 1.16.0で最新の記事をすべて入手しようとしています。私はphpMyadminでこれを行い、それらの結果からダンプを作成する必要があります。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が最新の記事を入手していないと感じています。

結果に画像名やリダイレクトを表示しない方法がある場合は、それも役立ちます。

答えて

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句があります。

これは、DBのレイアウトです: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をテストしていないためです。

+0

mysqlはエイリアスを定義した後に完全なテーブル名を使用することに不満を抱いています(つまり、page.page_titleはp.page_titleでなければなりません)。また、page.namespaceは存在せず、page.page_namespaceでなければなりません。それ以外の場合は、素晴らしいクエリです。 +1 – Neil

+0

@ニール、クエリを修正しました、ありがとう – Johan

関連する問題