1:n構造のnテーブルに複数のレコードが入ってます。
まず、同じ表示が2回されていることが問題でしたが、GROUP BYで1つにまとめることで2回表示されることはなくなりました。
GROUP_CONCATで、nテーブルに入っている複数のレコードをまとめることができました。
$en = filter_input(INPUT_GET, 'EN'); $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"; $stmt = $pdo->prepare($sql); $stmt->execute(); var_dump($sql); foreach ($stmt as $row) { echo '<br /><br />'; echo 'キャラ名:'.$row['キャラ名'].'<br />'; echo '技名:'.$row['技'].'<br />'; echo 'レベル:'.$row['レベル'].'<br />'; }
でも、実際には、こういう風に分けて表示したい。
そこで思いついたのがこのような方法でした。
$en = filter_input(INPUT_GET, 'EN'); $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"; $stmt = $pdo->prepare($sql); $stmt->execute(); var_dump($sql); foreach ($stmt as $row) { echo '<br /><br />'; echo 'キャラ名:'.$row['キャラ名'].'<br />'; $skill =$row['技']; $skill1 = mb_substr($skill, 0, 3); $skill2 = mb_substr($skill, 4, 5); $level =$row['レベル']; $level1 = mb_substr($level, 0, 4); $level2 = mb_substr($level, 5, 4); echo '<br />'; echo '技名:'.$skill1.'<br />'; echo 'レベル:'.$level1.'<br />'; echo '<br />'; echo '技名:'.$skill2.'<br />'; echo 'レベル:'.$level2.'<br />'; }
上記の記述だとスキルが増えたときに対応できないし、
スキル名によっても切り取り位置が変わる。
なにか良い方法はありませんでしょうか?
ナルトの例でいえば、
キャラ名は1回表示されるだけでいいからGROUP BYは必要そう。
技とレベルはあるだけ表示させたいから、GROUP_CONCATを使う?
でもそれすると、纏めて取るから、技とレベルを個別に取り出せなくなる。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/27 05:29