質問編集履歴

2

訂正

2020/12/08 06:13

投稿

premiummalts
premiummalts

スコア3

test CHANGED
File without changes
test CHANGED
@@ -299,3 +299,7 @@
299
299
  group by wrap.ID
300
300
 
301
301
  ```
302
+
303
+ ###バージョン情報
304
+
305
+ ちなみに使用しているのは MariaDB の v10.0.33 で、これはMySQLでいうと v5.5 に相当するものになります

1

訂正

2020/12/08 06:13

投稿

premiummalts
premiummalts

スコア3

test CHANGED
File without changes
test CHANGED
@@ -154,7 +154,7 @@
154
154
 
155
155
  ```
156
156
 
157
- ### ソースコードと試行錯誤
157
+ ### 現状のソースコード
158
158
 
159
159
  まずは【条件1:指定タグを持っている】だけを採用した場合を考えまして、こちらになります
160
160
 
@@ -204,6 +204,8 @@
204
204
 
205
205
 
206
206
 
207
+ ###求める結果
208
+
207
209
  あとは上記に【条件2:タグ単位で2件ずつ】という条件を加味して、次の結果を得たいという状況です
208
210
 
209
211
 
@@ -232,6 +234,8 @@
232
234
 
233
235
 
234
236
 
237
+ ###試したこと
238
+
235
239
  しかしこの結果の取得が大変難しく思います
236
240
 
237
241
 
@@ -261,3 +265,37 @@
261
265
 
262
266
 
263
267
  というような指定をしても、結果は条件1の場合と変わらずでした
268
+
269
+
270
+
271
+ あとは、全体をwrapと囲んだサブクエリを作り、それに対してgroup byをかけて以下のようにしてみたのですが、やはりこちらも求める結果になりません
272
+
273
+ ```sql
274
+
275
+ select *
276
+
277
+ from (
278
+
279
+ select p.ID
280
+
281
+ , p.contents
282
+
283
+ , group_concat(t.tag_name separator ' ') as tag_names
284
+
285
+ from posts p
286
+
287
+ left join tag_relations tr ON tr.contents_ID = p.ID
288
+
289
+ left join tags t ON t.ID = tr.tags_ID
290
+
291
+ where t.tag_name IN ( 'タグ1', 'タグ2', 'タグ4', 'タグ7' ) # タグ名を指定
292
+
293
+ AND p.ID NOT IN ( 1 ) # 記事IDを除外
294
+
295
+ group by p.ID, t.tag_name
296
+
297
+ ) AS wrap
298
+
299
+ group by wrap.ID
300
+
301
+ ```