2016-02-22 12 views
7

Web sitemde üç büyük bölüm var: insanların tartışmalara başlayabileceği bölüm, hikayeleri paylaşabilecekleri bir bölüm ve makaleleri içeren bir blog. Kendimi yazıyorum. Aşağıdaki veritabanı yapısını kullanarak özel bir etiketleme sistemi oluşturdum. Benim tags_xref tablosundaNormalleştirilmiş tablolardan genel olarak en popüler etiketler nasıl edinilir?

a busy cat

Bir tartışma bir öykü ya da makale ile aynı kimliğe sahip olabilir, çünkü her sonrası türü için 3 farklı sütunlar olması gerekiyordu.

Her şey tam olarak gerektiği gibi çalışıyor, ancak bazı etiketleri göstermek için sorgularla ilgili sorun yaşıyorum. ben zaten tartışma bölümünde en popüler etiketler göstermek için biliyorum:

"SELECT t.id, t.tag, COUNT(discussion_id) AS cnt 
    FROM tags_xref AS xrf 
    INNER JOIN tags AS t ON xrf.tag_id = t.id 
    GROUP BY t.id, t.tag 
    ORDER BY COUNT(discussion_id) DESC LIMIT 20" 

Şimdi, bütün web sitesinde en popüler etiketler göstermek istiyorum tartışmalar, öykü ve makalelerden böylece. Bu konuda bana yardımcı olabilecek biri var mı? Bu saatlerce üzerinde çalışıyorum ve bir çözüm bulamıyorum .. Teşekkürler!

+0

Örnek tablo ile tüm oluşturma tablosu sorgularını burada sağlayabilir misiniz? –

cevap

4

Sorgunuzda için basit bir değişiklik yapabilirsiniz: bunlar uygun olmadığında

SELECT t.id, t.tag, COUNT(*) AS cnt 
FROM tags_xref xrf INNER JOIN 
    tags t 
    ON xrf.tag_id = t.id 
GROUP BY t.id, t.tag 
ORDER BY COUNT(*) DESC 
LIMIT 20; 

Tahminen, çeşitli kimlikleri NULL bulunmaktadır. Bazı garip nedenlerden dolayı, belirli bir xref için tüm üç kimliğin değerlerini gerçekten saklarsanız, aşağıdakileri yapabilirsiniz:

SELECT t.id, t.tag, 
     (COUNT(story_id) + COUNT(discussion_id) + COUNT(article_id)) AS cnt 
FROM tags_xref xrf INNER JOIN 
    tags t 
    ON xrf.tag_id = t.id 
GROUP BY t.id, t.tag 
ORDER BY cnt DESC 
LIMIT 20; 
+0

Sen benim kahramanımsın, bu mükemmel çalışıyor! Gerçekten de uygun olmayan kimlikler normalde NULL, ancak bu güvenliğe dayanacağım. Tekrar teşekkürler! –

İlgili konular