MediaWiki: nasıl bir kullanıcı tarafından son N düzenlenmiş makaleler almak için?

2 Cevap php

Sitede kullanıcıların profilleri wiki kendi katkıları hakkında bazı istatistikler var ki PHP ve MySQL kullanarak, ben, MediaWiki dayalı bir wiki ile bir site entegre ediyorum.

I the last 3 edited articles of a user in a namespace (the main one, id 0), without repeating göstermek istiyorum ve onlara bağlantılar .

Bunu yapmak için, daha fazla veya daha az aşağıdakileri yapın:

// 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, ',') . ")");

Bazı kullanıcılar için, eski bir makale düzenlenmiş son olarak gösterir, ancak 2. ve 3. sonuç doğru: Sorun ben most of the time çalışır rağmen, doğru olduğundan emin değilim olmasıdır. Ben yanlış bir şey yapıyor olması gerekir bana bir şey yapar, ancak SQL benim güçlü noktası değildir ...

İpucu: Eğer MediaWiki veritabanı şemasını (oldukça autoexplicative olduğunu) bilmiyorsanız, ona bir göz atabilirsiniz here.

2 Cevap

"DISTINCT rev_page" fıkra your SQL kapalı atıyor. Bu rev_page (page.page_id 'ler) tüm DISTINCT ayırıyor, böylece sayfa başına rastgele rev_id alacak.

Bir birine iki sorguları birleştiren bu sorguyu, deneyin:

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

Ben MediaWiki uygulanması ile familliar değilim, ama ben guess yapmanız gerekir ORDER BY daha başka bir şey rev_id. Belki kimlikleri kronolojik atanacak hiçbir garantisi yoktur. Orada revision tabloda date alan bir tür değil mi?

Sonra olabilir:

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