Ben Kohana ile bir forum oluşturmaya çalışıyorum. Ben orada zaten iyi, ücretsiz bir forum yazılımıdır orada olduğunu biliyorum, ama bu bir aile site için, bu yüzden ben bir öğrenme deneyimi olarak kullanmayı düşündüm. Ben de forumda inşa sürecinde SQL hakkında daha fazla bilgi edinmek istiyorum gibi, Kohana yerleşik olan ORM kullanarak değilim.
Benim forum için ben 4 ana tablo var:
USERS
TOPICS
POSTS
COMMENTS
TOPICS tablosu: id (otomatik artırılır), konu satır.
USERS tablo: adınızı, e-posta, ad ve soyad ve diğer birkaç sigara ilişkili satırları
POSTS tablosu: id (otomatik artırılır), post-başlık, post-body, konu-id, kullanıcı kimliği, post-date, güncellenen-tarih, güncellenen-by (kullanıcı-kimliği içerecek olan En son Yorum Yaptı kişi)
COMMENTS tablosu: id (otomatik artırılır), post-id, kullanıcı kimliği ve açıklama
Ana forum sayfasında ben istiyorum:
- tüm konuları listesi
- Her konu için mesajların sayısı
- son güncelleme sonrası, ve kim güncellendi
- en son güncellenen konu "updated-date ORDER BY", üstüne büyük olasılıkla bir olmak
İşte ben bugüne kadar sorgu:
SELECT topics.id AS topic-id,
topics.topic,
post-user.id AS user-id,
CONCAT_WS(' ', post-user.first-name, post-user.last-name) AS name,
recent-post.id AS post-id,
post-num.post-total,
recent-post.title AS post-title,
recent-post.update_date AS updated-date,
recent-post.updated-by AS updated-by
FROM topics
JOIN (SELECT posts.topic-id,
COUNT(*) AS post-total
FROM POSTS
WHERE posts.topic-id = topic-id
GROUP BY posts.topic-id) AS post-num ON topics.id = post-num.topic-id
JOIN (SELECT posts.*
FROM posts
ORDER BY posts.update-date DESC) AS recent-post ON topics.id = recent-post.topic-id
JOIN (SELECT users.*,
posts.user-id
FROM users, posts
WHERE posts.user-id = users.id) as post-user ON recent-post.user_id = post-user.id
GROUP BY topics.id
Bu sorgu neredeyse mesaj var konular için tüm bilgi alacak gibi çalışır. But it doesn't return the topics that don't have any posts.
Ben mesaj masaya iki alt seçimleri yapar beri sorgu verimsiz ve yanlış olduğuna emin değilim, ama ben de olduğum noktaya alabilir tek yolu buydu.