Temayı Özelleştir
Özelleştirmeleri geri al
Neler yeni

Makale XenForo Kullanıcı Mesaj Sayısını Yeniden Oluştur (SQL)

Bu, kullanıcı gönderi sayılarını güncelleyen bir sorgudur. Sorgu, konu ve gönderilerin denetlenen ve silinen durumlarını, ayrıca her forumun "Bu forumdaki gönderileri kullanıcının toplamına dahil et" ayarını dikkate alır.

SQL:
UPDATE xf_user AS user SET message_count =
COALESCE(
 (
        SELECT COUNT(*)
        FROM xf_post AS post
        INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
        INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
        WHERE post.user_id = user.user_id AND post.message_state = 'visible'
        AND thread.discussion_state = 'visible' AND forum.count_messages = 1
        GROUP BY post.user_id
), 0 );


Yukarıdaki tek sorgu, çok büyük forumlarda zaman aşımına uğrayabilir. Bu durumda, her sorguda daha az sayıda kullanıcıyı işleyen sorgulara bölebilirsiniz. Aşağıdaki örnek, her biri en fazla 50,000 kullanıcıyı ele alan üç parçaya bölerek işleyecektir. Forumunuz için gerektiğinde değiştirin ve her biri iki user.user_id WHERE ifadesinde daha yüksek sayılara sahip ek sorgularla çalıştırın, artık eşleşen kayıt kalmayana kadar devam edin:

SQL:
UPDATE xf_user AS user
SET message_count =
     COALESCE(
     (
        SELECT COUNT(*)
        FROM xf_post AS post
        INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
        INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
        WHERE post.user_id = user.user_id
        AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
        AND forum.count_messages = 1
        AND user.user_id > 0 AND user.user_id < 50001
        GROUP BY post.user_id
    ), 0 );

UPDATE xf_user AS user
SET message_count =
     COALESCE(
     (
        SELECT COUNT(*)
        FROM xf_post AS post
        INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
        INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
        WHERE post.user_id = user.user_id
        AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
        AND forum.count_messages = 1
        AND user.user_id > 50000 AND user.user_id < 100001
        GROUP BY post.user_id
    ), 0 );

UPDATE xf_user AS user
SET message_count =
     COALESCE(
     (
        SELECT COUNT(*)
        FROM xf_post AS post
        INNER JOIN xf_thread AS thread ON thread.thread_id = post.thread_id
        INNER JOIN xf_forum AS forum ON forum.node_id = thread.node_id
        WHERE post.user_id = user.user_id
        AND post.message_state = 'visible' AND thread.discussion_state = 'visible'
        AND forum.count_messages = 1
        AND user.user_id > 100000 AND user.user_id < 150001
        GROUP BY post.user_id
    ), 0 );
 
@Lim10Ata çok faydalı bir konu, eline emeğine sağlık. XenForo kullanıcılarından şu şekilde bir soru gelirse üstadım nasıl yorumlarsınız?

AdminCP içerisinde araçlar kısmında üyeler yeniden oluşturuluyor, arsında ne gibi fark var?
 
@Lim10Ata çok faydalı bir konu, eline emeğine sağlık. XenForo kullanıcılarından şu şekilde bir soru gelirse üstadım nasıl yorumlarsınız?

AdminCP içerisinde araçlar kısmında üyeler yeniden oluşturuluyor, arsında ne gibi fark var?
Bazı durumlarda araçlar kısmı kullanılmaz hale gelebiliyor, örneğin bir müşterimde yedeğin eksik taşınması sonucunda rebuild ve araçlar gibi işlevlerin devredışı kaldığını gözlemledim. Donör olarak eksikleri kapatsak bile hata oluşturmaya devam edebiliyor bu tarz çözümler işinizi görecektir.

Tabi bu tarz sorgularla user bot, yorum ekleme gibi işlevleri önermiyorum zaten sağlıklıda olmuyor XenForo buna müsait değil. Bu tarz işlemleri düşünen arkadaşların xf.php ve entity’nin ne olduğuna göz atmasını öneriyorum ;)
 
@Lim10Ata oldukça etkileyici bir açıklama oldu, teşekkür ederim; elinize emeğinize sağlık.

XenForo konusunda siz de bu sektörün mihenk taşları arasındasınız.
 

Konuyu Kimler Okuyor

Geri