アプリ版:「スタンプのみでお礼する」機能のリリースについて

+-------------------------------+
| SHOP_CD |
+-------------------------------+
| 11230 |
| 11230,21002,28003,28005,99309 |
| 11230,23003 |
| 11230,23003,23003 |
| 11230,28003 |
| 11230,28003,28005 |
| 11230,28005,21002,28003 |
| 11302 |
| 11302,11230 |
| 11302,11230,11332 |
+-------------------------------+

カンマ区切りの文字列を
重複を省いて取得したいと考えておりますが
実現方法が思いつきません

結果としては、
11230
11302
11332
21002
23003
28003
28005
 ・
 ・
とSQLのみを使って配列で取得したいと考えております

splitのようなSQL系関数を探したがないので
実現方法またはヒントをいただけると幸いです
宜しく御願いいたします

環境は
PHP5、MySQL5.6
になります

A 回答 (2件)

#1ですが、参考までに・・・


今回のデータが仮にshopとcdの組み合わせのデータだったとして
shopのマスター、cdのマスター、shopとcdの組み合わせデータの3テーブルが必要です。
以下サンプルです。

//shopマスター
create table master_shop(sid int not null primary key,sname varchar(30));
insert into master_shop values(1,'shop_a'),(2,'shop_b'),(3,'shop_c'),(4,'shop_d'),(5,'shop_e'),(6,'shop_f'),(7,'shop_g'),(8,'shop_h'),(9,'shop_i'),(10,'shop_j');
select * from master_shop;

//cdマスター
create table master_cd(cid int not null primary key,cnumber int unique ,cname varchar(30) unique);
insert into master_cd values(1,11230,'cd_A'),(2,21002,'cd_B'),(3,28003,'cd_C'),(4,28005,'cd_D'),(5,99309,'cd_E'),(6,23003,'cd_F'),(7,11302,'cd_G'),(8,11332,'cd_H');
select * from master_cd;

//shop-cdデータ
create table data_shop_cd(scid int not null primary key auto_increment,sid int,cid int);
insert into data_shop_cd(sid,cid) values(1,1),(2,1),(2,2),(2,3),(2,4),(2,5),(3,1),(3,6),(4,1),(4,6),(4,6),(5,1),(5,3),(6,1),(6,3),(6,4),(7,1),(7,4),(7,2),(7,3),(8,7),(9,7),(9,1),(10,7),(10,1),(10,8)
select * from data_shop_cd;

//集計表
select sc.sid,s.sname,group_concat(c.cnumber order by sc.scid) as SHOP_CD from data_shop_cd as sc
inner join master_shop as s on s.sid=sc.sid
inner join master_cd as c on c.cid=sc.cid
group by sid;

//質問者さん得たいデータはcnumberの昇順のcdマスターデータなので
select * from master_cd order by cnumber asc;
    • good
    • 1

データの持ち方が明らかにおかしい(SQL的ではないという意味で)ですね


変える気がないなら検索はあきらめた方がよいでしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!