質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

2015閲覧

【PHPまたはMYSQL】グループ毎に特定のIDを振りたい

deeesutoron

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/06/01 06:58

下記テーブルは、item を group_id毎にわけ、連番(no)を振ったものです。

item_iditem_namegroup_idno
111あああ01
115おおお02
118くくく03
112いいい11
116かかか12
113ううう21
114えええ22
117ききき31

###やりたいこと
上記テーブルの、同一「group_id」毎に、「no」の1、もしくは「item_id」の最小値の item_idを、
同一「group_id」内の各データに持たせたいです。テーブルで表現すると下記のような形です。

item_iditem_namegroup_idnof_id
111あああ01111
115おおお02111
118くくく03111
112いいい11112
116かかか12112
113ううう21113
114えええ22113
117ききき31117

実現できれば、PHP(ver5.6以上)またはMysql(PDO)のどちらでもかまいません。
どうしてもロジックが考えつきません。ご教授いただけますと助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

SQLでやりましょうかね。
テーブルはitemsという名前だとします。

SQL

1SELECT A.*, B.f_id FROM items AS A 2 INNER JOIN (SELECT group_id,MIN(item_id) AS f_id FROM items GROUP BY group_id) AS B 3 ON A.group_id=B.group_id;

投稿2017/06/01 07:17

shi_ue

総合スコア4437

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deeesutoron

2017/06/01 07:42

テーブル名はまさにitemsで、そのままのSQLで表現できました! ありがとうございます! すぐに回答いただいたというところでベストアンサーとさせていただきました
guest

0

GROUP_IDでグループ化して、最小のITEM_IDを取得。それをJOINして取得すれば良いと思います。

SQL

1SELECT 2 T1.`item_id`, 3 T1.`item_name`, 4 T1.`group_id`, 5 T1.`no`, 6 T2.F_ID 7FROM 8 `testtable` AS T1 JOIN ( 9 SELECT 10 `group_id`, 11 MIN(`item_id`) AS F_ID 12 FROM 13 TESTTABLE 14 GROUP BY 15 GROUP_ID 16 ) AS T2 17 ON T1.`group_id` = T2.`group_id` 18ORDER BY 19 `group_id`, 20 `item_id`

投稿2017/06/01 07:23

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deeesutoron

2017/06/01 07:45

ありがとうございます! 書いていただいた通りで実現できました。 勝手ながらベストアンサーは回答順ということにさせていただきました。 大変申し訳ございません!
guest

0

1.gorup_idごとに中から最小の値をとって自己結合するSQL書いてVIEWを作成し、VIEWから情報取得する
※データが多いと速度面で心配
2.プログラムから、gorup_idごとの最小データをとってくる。とってきた値をgroup_idでプログラム上突合せ
リンク内容

投稿2017/06/01 07:19

kanimaru

総合スコア1013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

deeesutoron

2017/06/01 07:47

ありがとうございます! リンク先も、他の方のコードと合わせて勉強になりそうで助かります!
guest

0

こんな感じになります

テーブル作成、データ投入

SQL

1create table tbl( 2item_id int not null unique, 3item_name varchar(20), 4group_id int not null, 5no int null, 6f_id int null); 7insert into tbl(item_id,item_name,group_id) values 8(111,'あああ',0), 9(115,'おおお',0), 10(118,'くくく',0), 11(112,'いいい',1), 12(116,'かかか',1), 13(113,'ううう',2), 14(114,'えええ',2), 15(117,'ききき',3); 16

更新

SQL

1update tbl as t1 2inner join (select item_id,(select count(*)+1 from tbl as t5 where t5.item_id<t4.item_id and t4.group_id=t5.group_id) as no from tbl as t4) as t2 3on t1.item_id=t2.item_id 4inner join (select group_id,min(item_id) as f_id from tbl group by group_id) as t3 5on t1.group_id=t3.group_id 6set t1.no=t2.no,t1.f_id=t3.f_id;

確認

SQL

1select * from tbl order by group_id,no;

投稿2017/06/01 07:30

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2017/06/01 07:31

連番振る部分もSQLで処理してあります
deeesutoron

2017/06/01 07:54

ありがとうございます! 一行ずつ紐解いて、具体的にどのようになっているのか勉強させていただきたいと思います。 テーブルの作成のところから書いていただいているので、 似たような問題の方も応用できそうですね! ベストアンサーに関しては回答順にさせていただきました。 大変申し訳ございません!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問