MYSQLの構文でGROUP_CONCATという構文があります。
これは式の組み合わせの連結値を得ることができるもので例えば
1 2 3 4 5 6 7 8 9 |
+--------+--------+ | Team | Name | +--------+--------+ | 1| AAA | | 2| BBB | | 1| CCC | | 1| DDD | | 1| EEE | +--------+--------+ |
とあったとし、SQL文
SELECT
Team
,GROUP_CONCAT(Name
) FROM TABLE GROUP BY Team
;
を実行したとすると
1 2 3 4 5 6 |
+--------+-----------------------+ | Team | CONCAT_GROUPT(`NAME`) | +--------+-----------------------+ | 1| AAA,CCC,DDD| | 2| BBB,EEE| +--------+-----------------------+ |
と返ってくる、はずなんだけど・・・。
このCONCAT_GROUPに入れる値がINT型だとうまくいかない・・・。
今、蔵書リストをPHPで作成していてコミックを1巻1巻データ化しており
あるコミックのタイトルの所持している巻数を抜き出したいと思っている。
実際の内容が
1 2 3 4 5 6 7 8 9 |
+--------------+------------------+----+ | Group | Title | No | +--------------+------------------+----| | 新暗行御史 | 新暗行御史 (1) | 1 | | 新暗行御史 | 新暗行御史 (2) | 2 | | BLACK LAGOON | BLACK LAGOON (1) | 1 | | BLACK LAGOON | BLACK LAGOON (2) | 2 | | BLACK LAGOON | BLACK LAGOON (3) | 3 | +--------------+------------------+----+ |
で、これに対しSQL文
SELECT
Group
, GROUP_CONCAT(No
) FROM Book_List GROUP BY Group
;
を実行する。
理想としては
1 2 3 4 5 6 |
+--------------+-----------------------+ | Group | GROUP_CONCAT(`No`) | +--------------+-----------------------+ | 新暗行御史 | 1,2 | | BLACK LAGOON | 1,2,3 | +--------------+-----------------------+ |
となるはずなのだけれど、何故か・・・
1 2 3 4 5 6 |
+--------------+-----------------------+ | Group | GROUP_CONCAT(`No`) | +--------------+-----------------------+ | 新暗行御史 |[BLOB - 3バイト] | | BLACK LAGOON |[BLOB - 5バイト] | +--------------+-----------------------+ |
とか、こんな感じで返ってきてしまう・・・。
ただ、No
をINT型でなくTEXT型にするとうまくいくのだけれど、これだと
「1,2,3,4,5,6,7,8,9,10,11,12,13、・・・」という感じでなく
「1,10,11,12,13、・・・、2,3,4,5,6,7,8,9」という感じになってしまう。
うーん、どうしたものか・・・。
とりあえず今Yahoo!知恵袋で質問中なんで回答待ちってところですが・・・。