質問編集履歴
2
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
-
|
103
|
+
【※】post_ID=10はタグ1もタグ2も持っていますが、タグ1側を優先したいです
|
104
104
|
|
105
105
|
|
106
106
|
|
@@ -234,48 +234,50 @@
|
|
234
234
|
|
235
235
|
|
236
236
|
|
237
|
-
ならばと、二つをそのまま一つにまとめて、つまりunionで次のようにまとめてみれば実現できるか?と思ったのですが
|
237
|
+
ならばと、二つをそのまま一つにまとめて、つまりunionで次のようにまとめてみれば実現できるか?と思ったのですが…
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
238
|
+
|
239
|
+
|
240
|
+
|
243
|
-
欲しい結果とは微妙に異なりまして、ID=10について、「取得経緯のtag_ID」が1でなく2になってしまう結果でした
|
241
|
+
惜しくも【※】の部分が欲しい結果とは微妙に異なりまして、ID=10について、「取得経緯のtag_ID」が1でなく2になってしまう結果でした(そもそもunionはあまり推奨されないようですし、他の方法を探しています)
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
|
246
|
+
|
247
|
+
```sql
|
248
|
+
|
249
|
+
select p.ID, p.contents, '1' AS 取得経緯のtag_ID
|
250
|
+
|
251
|
+
from posts p
|
252
|
+
|
253
|
+
left join tag_relations tr ON tr.contents_ID = p.ID
|
254
|
+
|
255
|
+
left join tags t ON t.ID = tr.tags_ID
|
256
|
+
|
257
|
+
where t.tag_name IN ( 'タグ1' ) # 指定タグを持っている
|
258
|
+
|
259
|
+
AND p.ID NOT IN ( 1 ) # 指定記事を除外
|
260
|
+
|
261
|
+
group by p.ID
|
262
|
+
|
263
|
+
|
264
|
+
|
265
|
+
union
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
select p.ID, p.contents, '2' AS 取得経緯のtag_ID
|
270
|
+
|
271
|
+
from posts p
|
272
|
+
|
273
|
+
left join tag_relations tr ON tr.contents_ID = p.ID
|
274
|
+
|
275
|
+
left join tags t ON t.ID = tr.tags_ID
|
276
|
+
|
277
|
+
where t.tag_name IN ( 'タグ2' ) # 指定タグを持っている
|
278
|
+
|
279
|
+
AND p.ID NOT IN ( 1 ) # 指定記事を除外
|
280
|
+
|
281
|
+
group by p.ID
|
244
282
|
|
245
283
|
```
|
246
|
-
|
247
|
-
select p.ID, p.contents, '1' AS 取得経緯のtag_ID
|
248
|
-
|
249
|
-
from posts p
|
250
|
-
|
251
|
-
left join tag_relations tr ON tr.contents_ID = p.ID
|
252
|
-
|
253
|
-
left join tags t ON t.ID = tr.tags_ID
|
254
|
-
|
255
|
-
where t.tag_name IN ( 'タグ1' ) # 指定タグを持っている
|
256
|
-
|
257
|
-
AND p.ID NOT IN ( 1 ) # 指定記事を除外
|
258
|
-
|
259
|
-
group by p.ID
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
union
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
select p.ID, p.contents, '2' AS 取得経緯のtag_ID
|
268
|
-
|
269
|
-
from posts p
|
270
|
-
|
271
|
-
left join tag_relations tr ON tr.contents_ID = p.ID
|
272
|
-
|
273
|
-
left join tags t ON t.ID = tr.tags_ID
|
274
|
-
|
275
|
-
where t.tag_name IN ( 'タグ2' ) # 指定タグを持っている
|
276
|
-
|
277
|
-
AND p.ID NOT IN ( 1 ) # 指定記事を除外
|
278
|
-
|
279
|
-
group by p.ID
|
280
|
-
|
281
|
-
```
|
1
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -60,6 +60,8 @@
|
|
60
60
|
|
61
61
|
```
|
62
62
|
|
63
|
+
###ソースコードの結果
|
64
|
+
|
63
65
|
で、次のレコードが取得される状況ですが、
|
64
66
|
|
65
67
|
|ID|contents|
|
@@ -78,6 +80,8 @@
|
|
78
80
|
|
79
81
|
|
80
82
|
|
83
|
+
###欲しい結果
|
84
|
+
|
81
85
|
ここに次のように「このレコードはタグ1を持つ記事として取得されました」などの「取得経緯のtag_ID」を示したいのです
|
82
86
|
|
83
87
|
|ID|contents|取得経緯のtag_ID|
|
@@ -100,6 +104,8 @@
|
|
100
104
|
|
101
105
|
|
102
106
|
|
107
|
+
###テーブル
|
108
|
+
|
103
109
|
そしてテーブルはこうです
|
104
110
|
|
105
111
|
```sql
|
@@ -146,27 +152,27 @@
|
|
146
152
|
|
147
153
|
CREATE TABLE tags
|
148
154
|
|
149
|
-
(`ID` int, `tag_name` varchar(100)
|
155
|
+
(`ID` int, `tag_name` varchar(100))
|
150
156
|
|
151
157
|
;
|
152
158
|
|
153
159
|
INSERT INTO tags
|
154
160
|
|
155
|
-
(`ID`, `tag_name`
|
161
|
+
(`ID`, `tag_name`)
|
156
162
|
|
157
163
|
VALUES
|
158
164
|
|
159
|
-
(1, 'タグ1'
|
165
|
+
(1, 'タグ1'),
|
160
|
-
|
166
|
+
|
161
|
-
(2, 'タグ2'
|
167
|
+
(2, 'タグ2'),
|
162
|
-
|
168
|
+
|
163
|
-
(3, 'タグ3'
|
169
|
+
(3, 'タグ3'),
|
164
|
-
|
170
|
+
|
165
|
-
(3, 'タグ4'
|
171
|
+
(3, 'タグ4'),
|
166
|
-
|
172
|
+
|
167
|
-
(3, 'タグ5'
|
173
|
+
(3, 'タグ5'),
|
168
|
-
|
174
|
+
|
169
|
-
(3, 'タグ6'
|
175
|
+
(3, 'タグ6')
|
170
176
|
|
171
177
|
;
|
172
178
|
|
@@ -222,32 +228,54 @@
|
|
222
228
|
|
223
229
|
|
224
230
|
|
225
|
-
###
|
231
|
+
###試したこと
|
226
|
-
|
232
|
+
|
227
|
-
最終的な目的
|
233
|
+
最終的な目的のためには、クエリを一つにまとめずアプリケーション側で二つ実行すればいいのですが、まずそれはなしで、一つのクエリで実現したいと考えています
|
228
|
-
|
229
|
-
|
230
|
-
|
234
|
+
|
235
|
+
|
236
|
+
|
231
|
-
|
237
|
+
ならばと、二つをそのまま一つにまとめて、つまりunionで次のようにまとめてみれば実現できるか?と思ったのですが、惜しくも…
|
232
|
-
|
233
|
-
|
234
|
-
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
|
235
|
-
で
|
243
|
+
欲しい結果とは微妙に異なりまして、ID=10について、「取得経緯のtag_ID」が1でなく2になってしまう結果でした
|
244
|
+
|
236
|
-
|
245
|
+
```
|
246
|
+
|
237
|
-
|
247
|
+
select p.ID, p.contents, '1' AS 取得経緯のtag_ID
|
238
|
-
|
248
|
+
|
239
|
-
|
249
|
+
from posts p
|
250
|
+
|
240
|
-
|
251
|
+
left join tag_relations tr ON tr.contents_ID = p.ID
|
252
|
+
|
253
|
+
left join tags t ON t.ID = tr.tags_ID
|
254
|
+
|
241
|
-
where t.tag_name IN ( 'タグ1' )
|
255
|
+
where t.tag_name IN ( 'タグ1' ) # 指定タグを持っている
|
256
|
+
|
242
|
-
|
257
|
+
AND p.ID NOT IN ( 1 ) # 指定記事を除外
|
258
|
+
|
259
|
+
group by p.ID
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
union
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
select p.ID, p.contents, '2' AS 取得経緯のtag_ID
|
268
|
+
|
269
|
+
from posts p
|
270
|
+
|
271
|
+
left join tag_relations tr ON tr.contents_ID = p.ID
|
272
|
+
|
273
|
+
left join tags t ON t.ID = tr.tags_ID
|
274
|
+
|
243
|
-
where t.tag_name IN ( 'タグ2' )
|
275
|
+
where t.tag_name IN ( 'タグ2' ) # 指定タグを持っている
|
244
|
-
|
245
|
-
|
276
|
+
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
277
|
+
AND p.ID NOT IN ( 1 ) # 指定記事を除外
|
250
|
-
|
251
|
-
|
252
|
-
|
278
|
+
|
253
|
-
|
279
|
+
group by p.ID
|
280
|
+
|
281
|
+
```
|