3つのテーブルが存在します。(※画像)
全てのテーブルに項目「kumi」が入っており、このkumiで全てのレコード等を紐付けています。
※IDは各テーブルのauto_incrementで付与
行いたい事:
(1)テーブル「type」から項目「name」の中でaichiを検索し、kumiの値が一緒のレコードを取得します。この際、IDが昇順で取得します。
※画像の場合、name=aichiだとkumiは2になり、kumi=2の他のレコードはshinjyoのみ
(2)テーブル「kiroku」の中に(1)で取得した「name」の記録が残っているか確認し、最後の値を確認します。
※画像の場合は「aichi」
(3)(1)と(2)で取得したデータから次記録されるべきデータを抽出します。
※画像の場合:テーブル「type」は「shinjyo」、 テーブル「data」は「辻」
上手く言えないのですが、PHPで表現すると下記のような感じです:
for(type["kumi"]=2){
for(data["kumi"]=2){
$tmp="辻";
}
return array("name"=>"shinjyo","title"=>$tmp);
}
上記を出来ればMYSQL(SQL文)でお願いします。
もしPHP側で処理したほうが速度が早い傾向にあるのであればそちらでも構いません。
う~ん、いろいろ良くわからない点があるのですが、
(1)テーブル「type」から項目「name」の中でaichiを検索し、kumiの値が一緒のレコードを取得します。この際、IDが昇順で取得します。
※画像の場合、name=aichiだとkumiは2になり、kumi=2の他のレコードはshinjyoのみ
この時、取得されるレコードは、元々、検索のキーとなる値(この例では aichi)を含まないレコード、ということでしょうか。
単に aichi と同じ kumi の値を持つレコードであれば、
select * from type where kumi in (select kumi from type where name like 'aichi') order by id
で OK ですが、これだと、ID が 2 番と 6 番の2つが抽出されます。もし、ID 6 番のレコード(name が aichi のレコード)は抽出されないようにしたいのであれば、
select * from type where kumi in (select kumi from type where name like 'aichi') and not name like 'aichi' order by id
となります。
問い合わせ結果は、前者の場合であれば、
+------+------+---------+ | id | kumi | name | +------+------+---------+ | 2 | 2 | shinjyo | | 6 | 2 | aichi | +------+------+---------+
後者の方は
+------+------+---------+ | id | kumi | name | +------+------+---------+ | 2 | 2 | shinjyo | +------+------+---------+
となります。
(2)テーブル「kiroku」の中に(1)で取得した「name」の記録が残っているか確認し、最後の値を確認します。
※画像の場合は「aichi」
もし、(1)で取得したレコードが、先の例の前者であれば、kiroku から name が「shinjyo」もしくは「aichi」のレコードを探す事になります。これであれば、ID が 9 番のレコードが該当して、そのレコードの name は「aichi」になります。後者だとすると、ID が 7 番のレコードが該当するので、name は「shinjyo」になります。
という事は、(1)は、「『aichi』と同じ kumi の値を持つ全てのレコード」という意味で、もし、レコードが複数見つかれば、そのいずれかのレコードと同じ name を持つレコードのうち、最後(ID が最大)のもの、と私は解釈しました。
それであれば、
select * from kiroku where id = ( select max(id) from kiroku where kumi in ( select kumi from type where name like 'aichi' ) )
になります。結果は、
+------+------+-------+--------+ | id | kumi | name | title | +------+------+-------+--------+ | 9 | 2 | aichi | 相田 | +------+------+-------+--------+
となります。
(3)(1)と(2)で取得したデータから次記録されるべきデータを抽出します。
※画像の場合:テーブル「type」は「shinjyo」、 テーブル「data」は「辻」
ここで、全く分からなくなりました。これまで得られた結果から、どうすれば「shinjyo」や「辻」が導かれるのか、あるいは、(1)、(2)で私が勘違いしている点が有りましたら、解説いただけますか?
コメント(0件)