オブジェクトタグを照合して、1つのオブジェクトに関連するオブジェクトを見つけようとしています。一致するタグを数えることで最も一致するオブジェクトを返すmysqlクエリを作成しました。
私はDoctrine(1.2)に慣れていないので、誰かが私のスキーマを変更してDQLクエリを作成する正しい軌道に乗るのを手伝ってくれるかどうか疑問に思っていますか?大きな問題は、2つのタグセットが私のschema.ymlで互いに関連していないことです。
Schema.yml:
Object:
columns:
name:
relations:
Tags: { foreignAlias: Objects, class: Tag, refClass: Tagset}
Tagset:
columns:
object_id: {type: integer, primary: true, notnull: true}
tag_id: { type: integer, primary: true, notnull: true }
relations:
Object: { foreignAlias: Tagsets }
Tag: { foreignAlias: Tagsets }
Tag:
columns:
name: { type: string(255), notnull: true }
Object: { foreignAlias: Tags, class: Object, refClass: Tagset}
上記のスキーマを使用して機能するmysqlクエリは次のとおりです。
SELECT object.name, COUNT(*) AS tag_count
FROM tagset T1
INNER JOIN tagset T2
ON T1.tag_id = T2.tag_id AND T1.object_id != T2.object_id
INNER JOIN object
ON T2.object_id = object.id
WHERE T1.object_id = 2
GROUP BY T2.object_id
ORDER BY COUNT(*) DESC