質問編集履歴
4
テーブル定義情報などの追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -50,6 +50,47 @@
|
|
50
50
|
できればMySQLを用いた再帰クエリの書き方を、MySQLでは難しいのであれば、Railsでの再帰クエリの書き方をご教授いただければ幸いです。またその他の解決法もお待ちしております。
|
51
51
|
|
52
52
|
|
53
|
+
### 該当のデータ
|
54
|
+
```sql
|
55
|
+
+----------------+--------------+------+-----+---------+----------------+
|
56
|
+
| Field | Type | Null | Key | Default | Extra |
|
57
|
+
+----------------+--------------+------+-----+---------+----------------+
|
58
|
+
| id | bigint | NO | PRI | NULL | auto_increment |
|
59
|
+
| name | varchar(191) | NO | | | |
|
60
|
+
| content | text | YES | | NULL | |
|
61
|
+
| post_image | varchar(191) | YES | | NULL | |
|
62
|
+
| parent_post_id | int | NO | | 0 | |
|
63
|
+
| upvotes | int | YES | | 0 | |
|
64
|
+
| downvotes | int | YES | | 0 | |
|
65
|
+
| user_id | bigint | NO | MUL | NULL | |
|
66
|
+
| topic_id | bigint | NO | MUL | NULL | |
|
67
|
+
| created_at | datetime | NO | | NULL | |
|
68
|
+
| updated_at | datetime | NO | | NULL | |
|
69
|
+
| score | int | NO | | 0 | |
|
70
|
+
+----------------+--------------+------+-----+---------+----------------+
|
71
|
+
```
|
72
|
+
|
73
|
+
```csv
|
74
|
+
Post id, name, content, parent_post_id, score
|
75
|
+
1,"A","隣接リスト最高!",0,2
|
76
|
+
2,"B","シンプルでいいですよね",1,0
|
77
|
+
3,"C","アンチパターンですよ、経路列挙モデル使いましょう",1,2
|
78
|
+
4,"D","入れ子集合モデルの方が良いですよ",3,1
|
79
|
+
5,"E","こんにちは",0,0
|
80
|
+
```
|
81
|
+
|
82
|
+
###望む結果
|
83
|
+
topic
|
84
|
+
|_ 隣接リスト最高! 2点
|
85
|
+
| |_ アンチパターンですよ、経路列挙モデル使いましょう 2点
|
86
|
+
| |_ 入れ子集合モデルの方が良いですよ 1点
|
87
|
+
| |_ シンプルでいいですよね 0点
|
88
|
+
|_ こんにちは 0点
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
53
94
|
### 発生している問題・エラーメッセージ
|
54
95
|
|
55
96
|
```
|
@@ -57,9 +98,20 @@
|
|
57
98
|
```
|
58
99
|
|
59
100
|
|
101
|
+
|
102
|
+
### 補足情報(FW/ツールのバージョンなど)
|
103
|
+
|
104
|
+
mysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)
|
105
|
+
Rails 6.0.3.2
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
### 試したこと
|
112
|
+
|
60
113
|
ここに問題に対して試したことを記載してください。
|
61
114
|
|
62
115
|
### 補足情報(FW/ツールのバージョンなど)
|
63
116
|
|
64
|
-
mysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)
|
65
|
-
|
117
|
+
ここにより詳細な情報を記載してください。
|
3
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,8 +20,10 @@
|
|
20
20
|
|
21
21
|
などがあり、再帰クエリを使えるのなら、ツリー構造には隣接リストが最も適していると
|
22
22
|
[リンク内容](https://qiita.com/yuyasat/items/1200d7a6b56bae0c6f57#4-3-%E3%83%84%E3%83%AA%E3%83%BC%E6%A7%8B%E9%80%A0%E3%81%AE%E5%90%84%E5%AE%9F%E8%A3%85%E3%81%AE%E6%AF%94%E8%BC%83)
|
23
|
+
こちらに書いてあり、またSQL文で書いたほうが高速だと
|
24
|
+
[リンク内容](https://hashrocket.com/blog/posts/recursive-sql-in-activerecord)
|
23
|
-
こちらに
|
25
|
+
こちらにあったので、MySQLを8.0にアップデートし再帰クエリを用いようと試みました。
|
24
|
-
しかしRails内でのSQL文の書き方がわからなかったため、とりあえずRailsの機能
|
26
|
+
しかし初心者のため、SQL文に慣れておらず、またRails内でのSQL文の書き方がわからなかったため、とりあえずRailsの機能で再帰クエリを使おうと、下記のようなコードを書いてみました。
|
25
27
|
|
26
28
|
```rb
|
27
29
|
topics_controller.rb
|
@@ -45,9 +47,7 @@
|
|
45
47
|
しかしundefined methodのエラーが出てしまいました。
|
46
48
|
includesを外してみたり、sort_byを外してみたりしたのですが、問題は解決しませんでした。
|
47
49
|
初心者のため、何か根本的な勘違いをしているのだと思うのですが、それがどこなのかがわかりません。
|
48
|
-
SQL文で書いたほうが高速だと
|
49
|
-
[リンク内容](https://hashrocket.com/blog/posts/recursive-sql-in-activerecord)
|
50
|
-
|
50
|
+
できればMySQLを用いた再帰クエリの書き方を、MySQLでは難しいのであれば、Railsでの再帰クエリの書き方をご教授いただければ幸いです。またその他の解決法もお待ちしております。
|
51
51
|
|
52
52
|
|
53
53
|
### 発生している問題・エラーメッセージ
|
2
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -45,7 +45,9 @@
|
|
45
45
|
しかしundefined methodのエラーが出てしまいました。
|
46
46
|
includesを外してみたり、sort_byを外してみたりしたのですが、問題は解決しませんでした。
|
47
47
|
初心者のため、何か根本的な勘違いをしているのだと思うのですが、それがどこなのかがわかりません。
|
48
|
+
SQL文で書いたほうが高速だと
|
49
|
+
[リンク内容](https://hashrocket.com/blog/posts/recursive-sql-in-activerecord)
|
48
|
-
|
50
|
+
こちらにあったので、できればMySQLを用いた再帰クエリの書き方を、MySQLでは難しいのであれば、Railsでの再帰クエリの書き方をご教授いただければ幸いです。またその他の解決法もお待ちしております。
|
49
51
|
|
50
52
|
|
51
53
|
### 発生している問題・エラーメッセージ
|
1
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,7 +29,9 @@
|
|
29
29
|
```
|
30
30
|
|
31
31
|
```rb
|
32
|
-
post.rb
|
32
|
+
post.rb
|
33
|
+
has_many :children, foreign_key: :parent_post_id, class_name: 'Post'
|
34
|
+
|
33
35
|
def descendents
|
34
36
|
self.map do |p|
|
35
37
|
p.children.map do |child|
|