Başka bir tablodaki her n giriş için tek bir tabloda satır ekle

5 Cevap php

Temelde ne sahip kullanıcılar her 10 yorumlar için ödül almak bir sistemdir. Yani, db, bir tablo yorumları yakalar ve diğer her 10 Yorumlarınız için bir ödül ekledi. Bir kullanıcı 40 yorum ekledi varsa Örneğin, bunlar tablo 2'de 4 ödül / 4 satır olacaktır.

Bana çok basit geliyor, ama ben bunu anlamaya gibi olamaz. Belki orada bir modül operatör yardımcı olabileceğini düşündük, ama, tablo 2'de her zaman yeni bir satır eklemek üzerine değil, ya da sıraları, her zaman yeniden yazmak gerekir.

Takdir Yardım; Ben gözümün önünde o bir his var!

5 Cevap

i ilk tablo için bir model, ya da ekleme yapar, en az bir işlevi var tahmin ediyorum. Bu işlev için biraz daha fazla işlevsellik CAND, ve gibi bir şey yapın:

$current = count_your_current_coments();
if (fmod($current, 10) == 0) {
    insert_into_second_Table();
}

Aslında have ayrı bir tabloda onları izlemek için böyle benzersiz ödülleri vardır? Yoksa sadece numarasını gerektiğinde bir kullanıcı yapmış yorumların sayısını sayabilirsiniz?

Eğer ayrı bir tabloda ödülleri izlemek gerekiyor durumunda, bir tetikleyici düşünün:

create trigger insert_trigger after insert on comments_table
for each row begin
    if (select count(*) from comments_table where user_id = new.user_id) mod 10 = 0 then
        insert into rewards_table (user_id) values (new.user_id);
    end if;
end;

Eğer yorumlar tablodan silmeleri izin verirseniz, siz de orada bir kullanıcı için senin doğru sayısı hala vardır ve eğer, sen olurdu olup olmadığını sınar yorumlar masaya karşılık gelen on delete Tetiği gerekir kaldırmak için karar vermek için.

Siz kullanıcı tarafından o / o bir yorum gönderdiğinde her zaman eklenen yorumların sayısını saymak gerekir. Yorum% 10 == 0, daha sonra (ödül için) Tablo 2'de yeni bir satır eklemek zorunda kalırsınız.

  • eklemek
  • sayısını seçin (), bir kullanıcı için yorumlar
  • if number_of_comments % 10 == 0 --> do eklemek in rewards-table

ben bunu yapmalıyım yoludur.

Benim fikir bayrağı olarak ek bir alan yapmak için ihtiyaç olmasıdır. Bunu numaralama hangi ödüllendirdi adlandırabilirsiniz. Evet veya Hayır için 'N' için 'Y', bir açıklama eklemek her zaman, varsayılan 'N' kaydedebilir ve DB kontrol edebilirsiniz.

SELECT count(my_comment) FROM comments WHERE rewarded = 'N';

Bu 10 yorum ulaşırsa kontrol modülosunu kullanın. Eğer evet ise, 'Y' için 'N' ile diğer tablo ve güncelleştirme ödüllendirilir alana bir satır eklemek