画像の3行だけが表示されるはずなのですが、重複して2回取得してしまっています。
どこが原因でしょうか?
SQL文はこちらです。
sql
1SELECT UD.id,name5,name6, 2US.id,US.user_id,skill, 3UQ.id,UQ.user_id,quali 4 5FROM user_data UD 6LEFT JOIN user_skill US ON UD.id = US.user_id 7LEFT JOIN user_quali UQ ON UD.id = UQ.user_id 8 9WHERE UD.id = 1;
$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['技']; $skillArray = explode(",", $skill); $level =$row['レベル']; $levelArray = explode(",", $level); for($i = 0;$i < count($skillArray);$i++) { echo '<br />'; echo '技名:'.$skillArray[$i].'<br />'; echo 'レベル:'.$levelArray[$i].'<br />'; } }
↓ブラウザでの結果
キャラ名:サスケ
技名:千鳥
レベル:LV25
技名:天照
レベル:LV50
技名:月読
レベル:LV90
string(20) "千鳥,天照,月読"
array(3) { [0]=> string(6) "千鳥" [1]=> string(6) "天照" [2]=> string(6) "月読" }
$en = filter_input(INPUT_GET, 'EN'); $sql = "SELECT UD.id,created,name5,name6,birth_year,birth_month,birth_day,gender,pref,city, GROUP_CONCAT(skill),GROUP_CONCAT(US.year) AS skill_year, GROUP_CONCAT(quali),GROUP_CONCAT(UQ.year) AS quali_year,GROUP_CONCAT(day), lang,lang_deg, major_category,major_skill,cont_date,introduction FROM user_data UD LEFT JOIN user_skill US ON UD.id = US.user_id LEFT JOIN user_quali UQ ON UD.id = UQ.user_id LEFT JOIN user_lang UL ON UD.id = UL.user_id LEFT JOIN user_pr UP ON UD.id = UP.user_id WHERE UD.id = '$en' GROUP BY UD.id"; $stmt = $pdo->prepare($sql); $stmt->execute(); var_dump($sql); foreach ($stmt as $row) { echo '<br /><br />'; echo 'EngineerNo.'.$row['id'].'<br />'; echo '<img src="" alt="">'; $birth = $row['birth_year'].sprintf('%02d', $row['birth_month']).sprintf('%02d', $row['birth_day']); echo '年齢:'.floor((date("Ymd")-$birth)/10000).'歳'; echo ' | '; echo '所在:'.$row['pref'].' '.$row['city']; echo ' | '; echo '専攻カテゴリー:'.$row['major_category']; echo ' | '; echo '専攻スキル:'.$row['major_skill']; echo ' | '; echo '契約可能時期:'.$row['cont_date'].'<br /><br />'; echo 'PR'.$row['introduction'].'<br /><br />'; echo '<hr>'; $skill =$row['skill']; $skillArray = explode(",", $skill); $level =$row['skill_year']; $levelArray = explode(",", $level); for($i = 0;$i < count($skillArray);$i++) { echo '<br />'; echo 'スキル:'.$skillArray[$i].'<br />'; echo '経験年数:'.$levelArray[$i].'<br />'; } } echo '<br />'; var_dump($skill); echo '<br />'; var_dump($skillArray);
↓ブラウザでの結果
EngineerNo.1
年齢:36歳 | 所在:東京都 台東区 | 専攻カテゴリー:システム開発/運用 | 専攻スキル:JAVA | 契約可能時期:1ヶ月以内
PR宜しくお願いします。
スキル:
経験年数:1年未満
NULL
array(1) { [0]=> string(0) "" }
前者のナルトの例でいうと、string(20) "千鳥,天照,月読"を explodeに渡して配列作っているので
それと同じようにまず、
string() "JAVA,PHP,Javascript"を取得しなければならない。
実際、id=1の人の、user_dataテーブルに対する一番多いレコードは、user_skillテーブルに入っているJAVA,PHP,Javascriptの3レコードです。
user_qualiテーブルには2レコードが該当します。
何回も同じものが表示されることはありません。
そのうえで、concatしています。
これと同じことも先ほどの後者のソースでもしないのです。
まずはconcatできる前の状態(重複して表示されていない状態)にしたいのです。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/27 09:05