Frage

Ich habe die folgenden zwei Tabellen.

Lesemarktag (Lesezeichen, Tagid) Tag (Tagid, Titel)

Derzeit wähle ich alle Tags mit dem entsprechenden Lesezeichen aus. Das Problem ist, dass ich das Tag nur einmal auswählen möchte, um eine Doppelarbeit im Ergebnis zu vermeiden und nur die Tags zurückzubringen, die am meisten auftreten.

Dies ist meine aktuelle SQL -Abfrage:

SELECT Tag.Title 
FROM `Tag` INNER JOIN BookmarkTag 
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID'
War es hilfreich?

Lösung

Sie müssen die Join -Bedingung in einen einfügen ON Klausel nach der JOIN Stichwort. Nicht in dem where Klausel.
Sie mischten SQL89 mit SQL92 -Syntax. Dies mag funktionieren, was ich nicht getestet habe, aber das ist schneller.

SELECT Tag.Title 
FROM `Tag` t
INNER JOIN BookmarkTag b ON (t.tagid = b.tagid)
WHERE B.BookmarkID = 1
GROUP BY t.tagid
ORDER BY count(*) DESC

Um die Ergebnisse pro Tag eindeutig zu machen, tun Sie a group by auf Tagid.
Dann kannst du order by Das Auftreten von Count (*), um zu sehen, dass die Tags mit dem höchsten Ereignis nach oben schweben.
(Versuchen Sie immer zu verwenden count(*) Weil es schneller ist als count(afield) )

Andere Tipps

SELECT t.Title, COUNT(*) AS TitleCount
FROM BookmarkTag AS bt
INNER JOIN Tag AS t ON t.TagID = bt.TagID
GROUP BY t.Title
ORDER BY TitleCount DESC

Wenn Sie 7 beliebteste Titel erhalten möchten, fügen Sie hinzu LIMIT 7 am Ende der Abfrage oder einer anderen Nummer. Meine Version wird alles in absteigender Reihenfolge ihrer Popularität erzeugen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top