質問: 下記テーブルは、item を group_id毎にわけ、連番(no)を振ったものです。 | item_id | item_name | group_id | no | | --- | --- | --- | --- | | 111 | あああ | 0 | 1 | | 115 | おおお | 0 | 2 | | 118 | くくく | 0 | 3 | | 112 | いいい | 1 | 1 | | 116 | かかか | 1 | 2 | | 113 | ううう | 2 | 1 | | 114 | えええ | 2 | 2 | | 117 | ききき | 3 | 1 | ### やりたいこと 上記テーブルの、同一「group_id」毎に、「no」の1、もしくは「item_id」の最小値の item_idを、 同一「group_id」内の各データに持たせたいです。テーブルで表現すると下記のような形です。 | item_id | item_name | group_id | no | f_id | | --- | --- | --- | --- | --- | | 111 | あああ | 0 | 1 | 111 | | 115 | おおお | 0 | 2 | 111 | | 118 | くくく | 0 | 3 | 111 | | 112 | いいい | 1 | 1 | 112 | | 116 | かかか | 1 | 2 | 112 | | 113 | ううう | 2 | 1 | 113 | | 114 | えええ | 2 | 2 | 113 | | 117 | ききき | 3 | 1 | 117 | 実現できれば、PHP(ver5.6以上)またはMysql(PDO)のどちらでもかまいません。 どうしてもロジックが考えつきません。ご教授いただけますと助かります。
回答: SQLでやりましょうかね。 テーブルはitemsという名前だとします。 ``` SELECT A.*, B.f_id FROM items AS A INNER JOIN (SELECT group_id,MIN(item_id) AS f_id FROM items GROUP BY group_id) AS B ON A.group_id=B.group_id; ```