2

たとえば、次の 3 つのテーブルがあります。

terms_relation

╔═════════╦═════════╗
║ post_id ║ term_id ║
╠═════════╬═════════╣
║       1 ║       1 ║
║       1 ║       2 ║
║       1 ║       3 ║
╚═════════╩═════════╝

terms_taxonomy

╔════╦═════════╦══════════╗
║ id ║ term_id ║ taxonomy ║
╠════╬═════════╬══════════╣
║  1 ║       1 ║ categ    ║
║  2 ║       2 ║ categ    ║
║  3 ║       3 ║ tag      ║
║  4 ║       3 ║ categ    ║
║  5 ║       4 ║ categ    ║
║  6 ║       5 ║ tag      ║
╚════╩═════════╩══════════╝

条項

╔════╦════════╦════════╗
║ id ║  name  ║  slug  ║
╠════╬════════╬════════╣
║  1 ║ samsung║ samsung║
║  2 ║ nokia  ║ nokia  ║
║  3 ║ opera  ║ opera  ║
║  4 ║ chrome ║ chrome ║
║  5 ║ webkit ║ webkit ║
╚════╩════════╩════════╝

の場合、 に基づいてが含まれるterms_relation.post_id = 1すべての行を選択するにはどうすればよいですか?termstaxonomycategterms_taxonomyterm_id

したがって、取得する必要があります: samsung, nokia(operaタグだからではありません)。

これが私の現在の試みです。残念ながら、クエリの何が問題なのかわかりません。

select terms.name from terms_taxonomy 
join terms_relation 
on terms_relation.post_id = 1
join terms
on terms_taxonomy.term_id = terms.id
where taxonomy = "categ"

上記のクエリの望ましくない出力:

+---------+
| name    |
+---------+
| samsung |
| nokia   |
| opera   |
| chrome  |
| samsung |
| nokia   |
| opera   |
| chrome  |
| samsung |
| nokia   |
| opera   |
| chrome  |
| samsung |
| nokia   |
| opera   |
| chrome  |
| samsung |
| nokia   |
| opera   |
| chrome  |
| samsung |
| nokia   |
| opera   |
| chrome  |
+---------+
4

2 に答える 2

1

おそらく、条件を 内に移動する必要がありJOINます。また、post_id条件を WHERE 内に移動すると、より論理的に見えます。

SELECT t.name 
FROM terms_relation tr
JOIN terms_taxonomy tt ON tr.term_id = tt.term_id AND tt.taxonomy = "categ"
JOIN terms t ON tr.term_id = tt.id
WHERE tr.post_id = 1

編集あなたの質問をもう一度読み直しましたが、関係がどのように定義されているかを実際に理解できませんでした。これらの結合条件を想定しました:

  • terms_taxonomy.term_id = terms_relation.term_id
  • terms.id = terms_taxonomy.term_id
于 2012-05-13T11:28:28.007 に答える
0

結合なしのバージョンは次のとおりです。

SELECT name FROM terms WHERE id IN 
(SELECT id FROM terms_taxonomy,terms_relation,terms
 WHERE terms_relation.post_id = 1 
 AND terms_taxonomy.taxonomy = "categ" 
 AND terms.id = terms_taxonomy.term_id);
于 2012-05-13T11:23:01.657 に答える