2016-02-22 4 views
7

Sul mio sito web, ho tre grandi sezioni: una sezione in cui le persone possono iniziare le discussioni, una sezione in cui possono condividere storie e un blog con articoli che scrivo da solo. Ho creato un sistema di tagging personalizzato utilizzando la struttura del database sottostante.Come ottenere i tag più popolari in generale dalle tabelle normalizzate?

a busy cat

Nel mio tavolo tags_xref avevo bisogno di avere 3 colonne diverse per ogni tipo di messaggio, perché una discussione può avere lo stesso ID come una storia o un articolo.

Tutto sta funzionando esattamente come dovrebbe, ma ho problemi con le query per mostrare determinati tag. So già come per mostrare i tag più popolari nella sezione di discussione:

"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" 

Ora voglio mostrare i tag più popolari su tutto il sito, quindi dalle discussioni, racconti e articoli. C'è qualcuno che può aiutarmi con questo? Ho lavorato su questo per ore e non riesco a trovare una soluzione .. Grazie!

+0

potresti fornire tutte le query di creazione tabella qui con dati di esempio? –

risposta

4

si può fare una semplice modifica alla tua richiesta:

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; 

Presumibilmente, i vari ID sono NULL quando non sono appropriati. Se, per qualche strana ragione, hai effettivamente memorizzato i valori in tutti e tre gli ID per un determinato xrif, puoi fare:

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

Sei il mio eroe, funziona perfettamente! In effetti, gli id ​​che non sono appropriati sono normalmente NULL, ma costruirò in quella sicurezza. Grazie ancora! –

Problemi correlati