teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

追記

2016/06/26 15:40

投稿

earnest_gay
earnest_gay

スコア615

title CHANGED
File without changes
body CHANGED
@@ -293,7 +293,7 @@
293
293
 
294
294
  echo 'キャラ名:'.$row['キャラ名'].'<br />';
295
295
  echo $row['技-1'].'<br />';
296
- echo $row['技-1'].'<br />';
296
+ echo $row['技-2'].'<br />';
297
297
  echo $row['レベル-1'].'<br />';
298
298
  echo $row['レベル-2'].'<br />';
299
299
 

2

追記

2016/06/26 15:39

投稿

earnest_gay
earnest_gay

スコア615

title CHANGED
File without changes
body CHANGED
@@ -247,4 +247,57 @@
247
247
  とか表示させたいのです。
248
248
 
249
249
 
250
- 技(私の場合ではskillとyear)は人によって複数あるので、ある分だけを表示させたいです。
250
+ 技(私の場合ではskillとyear)は人によって複数あるので、ある分だけを表示させたいです。
251
+
252
+
253
+ ---
254
+ 6/27 0:28 追記
255
+
256
+ GROUP_CONCATでやりたいことに**似た**ことができました。
257
+
258
+ ![イメージ説明](99e39904d0b3995c0ae29271b6cd847f.png)
259
+
260
+
261
+ ```ここに言語を入力
262
+ $en = filter_input(INPUT_GET, 'EN');
263
+ $sql = "SELECT name.id, name AS 'キャラ名', user_id,GROUP_CONCAT(skill) AS '技',GROUP_CONCAT(level) AS 'レベル' FROM name LEFT JOIN skill ON name.id = skill.user_id WHERE name.id = '$en' GROUP BY name.id";
264
+ $stmt = $pdo->prepare($sql);
265
+ $stmt->execute();
266
+
267
+ var_dump($sql);
268
+
269
+ foreach ($stmt as $row) {
270
+ echo '<br /><br />';
271
+ echo 'キャラ名:'.$row['キャラ名'].'<br />';
272
+ echo 'キャラ名:'.$row['技'].'<br />';
273
+ echo 'キャラ名:'.$row['レベル'].'<br />';
274
+ }
275
+ ```
276
+
277
+ ![イメージ説明](b524abda387535fc094356fbc530ff4c.png)
278
+
279
+ これは、$row['レベル']内に該当のものがすべて入ってるのですべて出力されますが
280
+
281
+ キャラ名:ナルト
282
+ 技名 レベル
283
+ 螺旋丸 LV50
284
+ 螺旋手裏剣 LV80
285
+
286
+ という風に分けて表示したいので、
287
+ $row['技']内や$row['レベル']内に該当のものがすべて入ってるイメージではなく
288
+
289
+ 螺旋丸なら螺旋丸
290
+ 螺旋手裏剣なら螺旋手裏剣
291
+ ひとつひとつに割り当てられてるイメージでした。
292
+
293
+
294
+ echo 'キャラ名:'.$row['キャラ名'].'<br />';
295
+ echo $row['技-1'].'<br />';
296
+ echo $row['技-1'].'<br />';
297
+ echo $row['レベル-1'].'<br />';
298
+ echo $row['レベル-2'].'<br />';
299
+
300
+
301
+ のような。
302
+
303
+ とりあえず分けて表示したいのですがどうしたらよいでしょうか?

1

追記

2016/06/26 15:37

投稿

earnest_gay
earnest_gay

スコア615

title CHANGED
File without changes
body CHANGED
@@ -173,4 +173,78 @@
173
173
  `cont_date` varchar(255) NOT NULL,
174
174
  `introduction` text NOT NULL,
175
175
  PRIMARY KEY (`id`)
176
- ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 |
176
+ ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 |
177
+
178
+ ---
179
+
180
+ 【追記】
181
+ 重複したカラムを取得する方法はASで別名を付けることで解決しました。
182
+ 2回表示されているものは下記のSQL文に修正することで解決しました。
183
+
184
+ ```sql
185
+ SELECT UD.id,created,name5,name6,birth_year,birth_month,birth_day,gender,pref,city,
186
+ skill,US.year AS skill_year,
187
+ quali,UQ.year AS quali_year,day,
188
+ lang,lang_deg,
189
+ major_category,major_skill,cont_date,introduction
190
+ FROM user_data UD
191
+ LEFT JOIN user_skill US ON UD.id = US.user_id
192
+ LEFT JOIN user_quali UQ ON UD.id = UQ.user_id
193
+ LEFT JOIN user_lang UL ON UD.id = UL.user_id
194
+ LEFT JOIN user_pr UP ON UD.id = UP.user_id
195
+ WHERE UD.id = '$en'
196
+ GROUP BY UD.id;
197
+ ```
198
+ 2回表示されなくなった結果、本当は2つあるスキルが1つしか表示されなくなりました。
199
+
200
+ ![イメージ説明](691de337e7a05a693c154a1ba58ef52e.png)
201
+
202
+ GROUP BYでスキルが1つしかない状態ですが、実際にはDBに2フィールド登録されています。
203
+
204
+ ![イメージ説明](6d5a70dbc1ef4a9680efea0577f770ee.png)
205
+
206
+
207
+
208
+
209
+ これはどう対処したらよろしいのでしょうか?
210
+
211
+ 規模を小さくして考えるとこうなります。
212
+
213
+ +-----------+------+----+----------+------------+
214
+ | ninjya_id |name | id | skill_id | skill_name |
215
+ +-----------+------+----+----------+------------+
216
+ | 1 |ナルト| 1 | 1 | 螺旋丸 |
217
+ +-----------+------+----+----------+------------+
218
+ | 1 |ナルト| 2 | 1 |超大玉螺旋丸|
219
+ +-----------+------+----+----------+------------+
220
+ | 2 |サスケ| 3 | 2 | 千鳥 |
221
+ +-----------+------+----+----------+------------+
222
+ | 2 |サスケ| 4 | 2 | 天照 |
223
+ +-----------+------+----+----------+------------+
224
+ | 2 |サスケ| 5 | 2 | 月読 |
225
+ +-----------+------+----+----------+------------+
226
+
227
+
228
+ 【名前】
229
+ ナルト
230
+
231
+ 【技】
232
+ 螺旋丸
233
+ 超大玉螺旋丸
234
+
235
+
236
+ とか
237
+
238
+
239
+ 【名前】
240
+ サスケ
241
+
242
+ 【技】
243
+ 千鳥
244
+ 天照
245
+ 月読
246
+
247
+ とか表示させたいのです。
248
+
249
+
250
+ 技(私の場合ではskillとyear)は人によって複数あるので、ある分だけを表示させたいです。