回答編集履歴

3

修正

2019/09/29 06:21

投稿

退会済みユーザー
test CHANGED
@@ -162,9 +162,9 @@
162
162
 
163
163
  ```
164
164
 
165
- update answers set url = replace(url, 'http://example.com/question/1', 'http://example.com/question/2')
165
+ update answers set url = replace(url, 'http://example.com/question/1/', 'http://example.com/question/2/')
166
166
 
167
- where url like 'http://example.com/question/1%'
167
+ where url like 'http://example.com/question/1/%'
168
168
 
169
169
  ```
170
170
 

2

追記

2019/09/29 06:21

投稿

退会済みユーザー
test CHANGED
@@ -129,3 +129,45 @@
129
129
  questions なら、`http://example.com/question/{id}` とPHP側で組み立てればいいし、
130
130
 
131
131
  answers なら、`http://example.com/question/{question_id}/answer/{id}` となるように設計します。
132
+
133
+
134
+
135
+ ## 追記2
136
+
137
+
138
+
139
+ **仮に、現状の設計のままでも**
140
+
141
+
142
+
143
+ > どうなるのでしょうか?100万件の途中で、別の100万件が同じテーブルに対して処理されるということです
144
+
145
+
146
+
147
+ こんなことは発生しません。
148
+
149
+
150
+
151
+ ```
152
+
153
+ update questions set url = 'http://example.com/question/2' where id = 1;
154
+
155
+ ```
156
+
157
+
158
+
159
+ を行った時、
160
+
161
+
162
+
163
+ ```
164
+
165
+ update answers set url = replace(url, 'http://example.com/question/1', 'http://example.com/question/2')
166
+
167
+ where url like 'http://example.com/question/1%'
168
+
169
+ ```
170
+
171
+
172
+
173
+ を一回実行すれば済む。

1

追記

2019/09/29 06:18

投稿

退会済みユーザー
test CHANGED
@@ -59,3 +59,73 @@
59
59
 
60
60
 
61
61
  そうすれば、answersからquestion_idを辿ってurl を取得することができるからです。
62
+
63
+
64
+
65
+ ---
66
+
67
+
68
+
69
+ ## 追記1
70
+
71
+
72
+
73
+ > 質問データは「質問ページのURL」のデータを持っています。
74
+
75
+ →(http://example.com/question/1)
76
+
77
+
78
+
79
+ > 回答データは「質問ページのURL」のデータを持っていて、スラッシュ以降に自分のURLを持っています。
80
+
81
+ →(http://example.com/question/1/answer/1-a)
82
+
83
+
84
+
85
+ この場合も私から見れば「設計が悪い」です。
86
+
87
+
88
+
89
+ answeres
90
+
91
+
92
+
93
+ |id|question_id|path|
94
+
95
+ |--:|--:|
96
+
97
+ |1|1|/answer/1-a|
98
+
99
+ |2|1|/answer/2-a|
100
+
101
+
102
+
103
+ ともっていれば、
104
+
105
+
106
+
107
+ ```
108
+
109
+ select
110
+
111
+ concat(questions.url, answers.path) as url
112
+
113
+ from answers
114
+
115
+ inner join questions on questions.id = answers.question_id
116
+
117
+ ```
118
+
119
+
120
+
121
+ でurlは取得できます。
122
+
123
+
124
+
125
+ もっと言えば、urlはカラムに持つ必要すらないと思います。
126
+
127
+
128
+
129
+ questions なら、`http://example.com/question/{id}` とPHP側で組み立てればいいし、
130
+
131
+ answers なら、`http://example.com/question/{question_id}/answer/{id}` となるように設計します。