質問編集履歴

1

誤字、文法の修正、題名わかりやすく

2021/03/27 05:49

投稿

minorm
minorm

スコア0

test CHANGED
@@ -1 +1 @@
1
- golang gorm many2many find and/or retrieving
1
+ golang gorm many2many 逆参照でのOR/AND検索を行いたい
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- Many2Many Field 間でAnd/Or で検索結果を取得したい
5
+ Many2Many 間で 逆参照を行い And/Or で検索結果を取得したい
6
6
 
7
7
 
8
8
 
@@ -58,6 +58,8 @@
58
58
 
59
59
 
60
60
 
61
+ ※paramsの取得は出来ています
62
+
61
63
  ※router.go, db.go などは省略します
62
64
 
63
65
 
@@ -76,7 +78,7 @@
76
78
 
77
79
 
78
80
 
79
- // ここで検索 一応 OR 検索になっているはずです
81
+ // !!ここ!!
80
82
 
81
83
  output := []models.Problem{}
82
84
 
@@ -110,7 +112,11 @@
110
112
 
111
113
  c.HTML(http.StatusOK, "Index.tmpl", gin.H{
112
114
 
113
- "Title": "Result", "Result": params, "Problems": output,
115
+ "Title": "Index",
116
+
117
+ "Result": params,
118
+
119
+ "Problems": output,
114
120
 
115
121
  })
116
122
 
@@ -124,14 +130,14 @@
124
130
 
125
131
 
126
132
 
127
- 無理やり実装はしたのですが、素人目に見ても非行率なので...
133
+ 上記のように無理やり実装はしまし
134
+
135
+ 一応動作はします
128
136
 
129
137
 
130
138
 
131
139
  `tag.GetOneByName` は以下のようになっています
132
140
 
133
- これもおかしなところがあるかもしれません
134
-
135
141
 
136
142
 
137
143
  ```go
@@ -140,9 +146,9 @@
140
146
 
141
147
  // tagName に部分一致する、Tag.Nameを持つ最初の models.Tag(ID昇順で) レコードを取得する
142
148
 
143
- // 見つかったら nil, 一件も見つからなかったら errors.New()
149
+ // 見つかったら nil, 一件も見つからなかったら "record not found" を吐く
144
-
150
+
145
- // Problems も全部取得する ので処理遅い
151
+ // Problems も全部取得する ので処理遅い はず
146
152
 
147
153
  func (self *Tag)GetOneByName(tagName string) error {
148
154
 
@@ -154,21 +160,25 @@
154
160
 
155
161
 
156
162
 
157
- 一応And検索も無理やり実装はしましたが、いくら調べてもちゃんとした(?)gorm
163
+ 一応And検索も無理やり実装はしました
158
-
164
+
159
- 使い方が検索できたのでこちらに質問しした
165
+ が、`O(N^3)` 位アルゴリズムになってい
160
-
161
-
162
-
166
+
167
+
168
+
169
+
170
+
163
- `gorm.io` の公式Referenceは当然見ており `Back-Referece`を発見したので
171
+ `gorm.io` の公式Reference見て `Back-Referece`を発見したので
164
172
 
165
173
  これは行けるだろうと思ってさんざん弄ったのですが、結局良くわかりませんでした
166
174
 
167
175
 
168
176
 
169
- 多分ですが上手いこ `return db.DB.Model( ... ).Where( ... ).Association( ... ).Find( ... )`
177
+ 普通に考える `return db.DB.Model( ... ).Where( ... ).Association( ... ).Find( ... )`
170
-
178
+
171
- のような一行のSQLで取得出来るんではないかなと思っているんですが、可能でしょうか
179
+ のような一行のSQLで取得出来ると思うのですが、可能でしょうか
180
+
181
+ 生のSQLでの解消なども可能であればお願いします
172
182
 
173
183
 
174
184
 
@@ -186,7 +196,7 @@
186
196
 
187
197
 
188
198
 
189
- ❯ go go.mod
199
+ bat go go.mod
190
200
 
191
201
  go 1.16
192
202
 
@@ -214,12 +224,6 @@
214
224
 
215
225
 
216
226
 
217
- プログラミング歴は2ヶ月くらい
218
-
219
- SQLは昨日知りました `SQL Bolt` というサイトを少しづつやっている最中です
220
-
221
- ORMを使わずにSQLそのまま書けたら簡単に出来るんでしょうかね
222
-
223
227
 
224
228
 
225
229
  schemeは以下のとおりです
@@ -228,8 +232,6 @@
228
232
 
229
233
  ```bash
230
234
 
231
-
232
-
233
235
  ❯ sqlite3 test.db
234
236
 
235
237
  SQLite version 3.31.1 2020-01-27 19:55:54