もう一度、私の小さなデータベースでmysqlについて練習するための質問:
私は次のようにテーブルを手に入れました:
Songs Link Tags
======= ===== =======
Sid Sid Tid
Songname Tid Tagname
今私がやろうとしているのは、いくつかのタグを入力して曲をクエリ(または検索)して、その曲が一致率を作成するために必要なタグの数を表示することです。
素晴らしいstackoverflowコミュニティのおかげで私はクエリを受け取りました
SELECT s.Sid, s.Songname
FROM Songs s
JOIN Link l ON ( l.Sid = s.Sid )
JOIN Tags t ON ( t.Tid = s.Tid )
WHERE t.Tagname IN ( 'X', 'Y' )
GROUP BY s.Sid, s.Songname
HAVING COUNT(1) = 2
これらの2つのタグに完全に一致する曲を検索します。
ここで、タグG、X、Y、およびZを持つこの曲Aがあるとします
。クエリには、XとYが含まれているため、この曲が見つかります。ただし、この曲には他に2つあるので、この曲の50%を示す一致率を(phpを使用して)作成します。
PHPの部分に問題はありませんが、これらのタグに一致するすべての曲と、1つの結果セット内のタグの総数を取得するためのクエリを理解できません。
乾杯!
編集1:
ほとんどの答えが私がすでに試したことを示していることに気づきました。だから私は別のより深い例を作ります:
あなたが次の4つの曲を持っていると仮定します:
タグA、B、X、Y
のAタグA、B、C、D、E、X、YC
のタグA 、B、C、D、F、X
D、タグXおよびY
ここで、タグXおよびYを持つ曲を検索するためのクエリが入力されます。次の出力が必要です。
TotalNumberOfTags: Song:
4 A
7 B
2 D
CはXとYを持っていなかったので、彼は脱落します。
Edit2:
説明のために、クエリを使用したい
SELECT COUNT(t.Tagname) FROM FROM Songs s
JOIN Link l ON ( l.Sid = s.Sid )
JOIN Tags t ON ( t.Tid = s.Tid )
WHERE s.Songname="A"
上記のクエリによって引き起こされた曲名のセット全体で、セットでORDER BY COUNT(t.Tagname)ASCを使用する1つのクエリ。