例えば下記のようなデータがあるとして(本来はテーブルですが、便宜上jsonにしています)、
json
1users = [ 2 { 3 "user_name": "userA", 4 "posts": [ 5 { 6 "post_name": "postA", 7 "comments": [ 8 { 9 "body": "foo" 10 }, 11 { 12 "body": "bar" 13 } 14 ] 15 } 16 ] 17 }, 18 { 19 "user_name": "userB", 20 "posts": [ 21 { 22 "post_name": "postB", 23 "comments": [ 24 { 25 "body": "foo" 26 }, 27 { 28 "body": "foo" 29 } 30 ] 31 } 32 ] 33 } 34]
(上記の json データだと紛らわしいとの指摘を受けましたので、以下テーブルデータも併記しました。)
users テーブル:
| id | name |
|---|---|
| 1 | userA |
| 2 | userB |
posts テーブル
| id | user_id |
|---|---|
| 1 | 1 |
| 2 | 2 |
comments テーブル
| id | post_id | body |
|---|---|---|
| 1 | 1 | foo |
| 2 | 1 | bar |
| 3 | 2 | foo |
| 4 | 2 | foo |
このデータに対して、以下のように検索したいです。
postsを持つusers;- さらにその
postsがcommentsを持つ; - さらにその
commentsのすべては "foo" を含む.
例のデータの場合ですと、上記条件をクリアしたユーザはuserBとなります。
サブクエでできるのは分かりますが、パフォーマンスが良くなく、joinで実現できないでしょうか?
(上記はのサンプルのリレーションシップは3層だけですが、実際はもっとリレーションシップが深いです。)
それか、別のもっといいやり方はあるのでしょうか?
回答3件
あなたの回答
tips
プレビュー