2016-02-22 5 views
7

Auf meiner Website habe ich drei große Bereiche: einen Bereich, in dem Leute Diskussionen beginnen können, einen Bereich, in dem sie Geschichten erzählen können und einen Blog mit Artikeln, die ich selbst schreibe. Ich habe ein benutzerdefiniertes Tagging-System mit der folgenden Datenbankstruktur erstellt.Wie erhalten Sie die beliebtesten Tags aus normalisierten Tabellen?

a busy cat

In meinem tags_xref Tisch brauchte ich drei verschiedene Spalten für jeden Post-Typ haben, weil eine Diskussion über die gleiche ID wie eine Geschichte oder Artikel haben kann.

Alles funktioniert genauso wie es sollte, aber ich habe Probleme mit Abfragen, bestimmte Tags anzuzeigen. Ich weiß schon, wie die beliebtesten Tags im Diskussionsteil zeigen:

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

Jetzt habe ich die beliebtesten Tags auf der gesamten Website, so aus den Diskussionen, Geschichten und Artikeln zeigen will. Gibt es jemanden, der mir dabei helfen kann? Ich arbeite seit Stunden daran und finde keine Lösung. Danke!

+0

könnten Sie bitte alle create table query hier mit Beispieldaten angeben? –

Antwort

4

Sie können eine einfache Änderung Ihrer Anfrage tun:

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; 

Vermutlich sind die verschiedenen IDs sind NULL, wenn sie nicht geeignet sind. Wenn Sie aus irgendeinem seltsamen Grund tatsächlich Werte in allen drei IDs für eine gegebene Xref gespeichert haben, können Sie folgendes tun:

+0

Du bist mein Held, das funktioniert perfekt! Tatsächlich sind die ids, die nicht angemessen sind, normalerweise NULL, aber ich werde in dieser Sicherheit bauen. Danke noch einmal! –

Verwandte Themen