Forum, olsun son mesaj / başlık

2 Cevap php

Temelde, bir intranet için küçük bir forum script yazıyorum.

Ben 3 mysql forum için (MySQLi) tablolar var:

forum_answer - holds replies forum_question - holds first posts forum_categories - holds names and description of categories.

Tamam, bu yüzden forum indeksine, ben bu kategori / forum yapılan son postayı almak için de, ancak, bir sütun tüm kategoriler almak için bir tablo var var.

Eğer ben o forumda yapılan son mesajı alabilir konusunda herhangi bir fikir var mı?

Ben belki forum_categories masaya yeni bir sütun ekleyerek düşünme, ve bir sonrası yapılan her güncelleme, ancak, bu dağınık alabilir.

Teşekkürler :)

2 Cevap

Sorgu-bilge, size benzer bir şey kullanarak kategorilerin listesini almak için sorgu ile alabilirsiniz:

 select forum_categories.id, forum_categories.name, max( forum_answer.id ) as 
 from forum_categories
 left join forum_questions on forum_questins.category_id = forum_categories.category_id
 left join forum_answers on forum_answers.question_id = forum_questions.question_id
 group by forum_categories.id, forum_categories.name

Öyle bir operasyon sizin forumlarda doğasına bağlıdır nasıl pahalıdır. Insanlar sık ​​sık gönderme eğer her zaman birileri mesaj olabilir daha pahalı kategori sütun güncelleniyor. Insanlar sık ​​sık kategorilerin listesini yüklüyorsanız, katılır daha pahalı bir işlem olabilir.

Ayrıca bu yararlı adresinin kategori listesini çekmek için bir görünüm oluşturmak için bulabilirsiniz:

 create view category_list as
 select forum_categories.id, forum_categories.name, max( forum_answer.id ) as latest_asnwer_id
 from forum_categories
 left join forum_questions on forum_questins.category_id = forum_categories.category_id
 left join forum_answers on forum_answers.question_id = forum_questions.question_id
 group by forum_categories.id, forum_categories.name

Hangi bir tablo sanki o erişebilir.

Aslında doğru yönde düşünüyor.

Siz "önbellek" Bir soru için son yazı ve bir forum için son yazılan kesinlikle gerekir ve Sırasıyla [forum_question] ve [forum_categories] tablolarda saklayın. Onlara biri yeni bir yazı ekler her zaman güncellemek veya bir yazıyı silmek anlamına gelen "Cache".

Forum içerik miktarı bazı eşiğine ulaştığında, son mesajların canlı hesaplamalar çok yavaş olacaktır. "Cache" yeni bir yazı gönderilen her zaman güncelleyerek birçok istekleri ve böylece neredeyse farkedilemez üzerine dağıtılmış küçük güncellemeler içine bu büyük bir kerelik hesaplama işi bölmek.

Bir mesajı silmek zaman olsun sadece hit, daha sonra soru için önbelleği ve forum güncellemeniz gerekir. Ancak bu nadir bir olaydır, bu nedenle fiyat tanınan olabilir.