0

次の2つのテーブルがあります。

BookingTag(BookmarkID、TagID)タグ(TagID、タイトル)

現在、適切なBookmarkIDを持つすべてのタグを選択しています。問題は、結果の重複を避けるためにタグを1回だけ選択し、最も多く発生するタグのみを戻すことです。

これは私の現在のSQLクエリです:

SELECT Tag.Title 
FROM `Tag` INNER JOIN BookmarkTag 
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID'
4

2 に答える 2

3

キーワードONの後の句に結合条件を入れる必要があります。条項にはありません。 SQL89とSQL92構文を混在させていました。これは私がテストしていないのでうまくいくかもしれませんが、これはより速いです。JOINwhere

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

タグごとに結果を一意にするために、group byontagidを実行します。
次にorder by、count(*)を使用してオカレンスを実行し、オカレンスが最も高いタグを一番上にフロートさせることができます。(より高速なので、
常に使用してみてください)count(*)count(afield)

于 2011-06-12T20:10:17.427 に答える
2
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

最も人気のある7つのタイトルを取得する場合LIMIT 7は、クエリの最後に追加するか、その他の番号を追加します。私のバージョンでは、人気の降順ですべてが生成されます。

于 2011-06-12T20:22:53.570 に答える