2

ドキュメント、ドキュメント タグ、および多対多の関係テーブル (ドキュメントの ID とタグの ID) の 3 つの MySQL テーブルがあります。

Document
+------+
|  id  |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+

DocumentToTag
+------+------+
|idDoc |idTag |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    1 |
|    2 |    3 |
|    4 |    4 |
+------+------+

Tag
+------+-------+
|  id  | value |
+------+-------+
|    1 |     2 |
|    2 |     4 |
|    3 |     8 |
|    4 |    42 |
+------+-------+

たとえば、特定の値を持つ 2 つ (またはそれ以上) のタグを持つドキュメントを取得する必要があります。次の JOIN クエリを使用します。

SELECT DISTINCTROW
Document.id

FROM Document
LEFT JOIN DocumentToTag AS dt1 ON dt1.idDoc = Document.id  
LEFT JOIN Tag AS tag1 ON dt1.idTag = tag1.id
LEFT JOIN DocumentToTag AS dt2 ON dt2.idDoc = Document.id
LEFT JOIN Tag AS tag2 ON dt2.idTag = tag2.id

WHERE tag1.value = 'someTagValue'
AND   tag2.value = 'someOtherTagValue'

この場合、条件に追加する必要があるタグと同じ数の JOIN を実行する必要があります。そのため、クエリはスクリプトによって動的に作成される必要があります。それに対処するよりエレガントな方法はありますか?

4

2 に答える 2

0

あなたはこれを探すかもし​​れません

   SELECT DISTINCT
  Document.id
  FROM Document
 LEFT JOIN DocumentToTag AS dt1 ON dt1.idDoc = Document.id  
 LEFT JOIN Tag AS tag1 ON dt1.idTag = tag1.id

 WHERE tag1.value in ( 'someTagValue' ,'someOtherTagValue')

デモはこちら

于 2013-04-24T10:33:27.377 に答える