いつもお世話になります。
(現状)
①下記のDBにあるような値が、すでにデータベースに格納されております。
②また、毎月下記のDataにあるような値をデータベースに追加でinsert into
していく作業を想定しております。
(問題点)
- Dataはどうしても、DBにすでに格納されてしまっている情報を持ってきてしまう(例えば[2])ため、これは既にDBが持つ情報もDataには含まれる。
- 毎月追加するDateとして格納する値(配列の要素)はDBにカラムにある<period>の情報を持っておりません。
(質問)
ア) 上記の1)の問題点に記載の通り、insert intoしたいdataは下記の例で行けば[3][5][8]の三つだけになります。通常、このようなケースを処理をする場合既存のDBからselectしてfetachしてすべての情報を抜き出し、例えば<name>&<period>のように結合させ(nameとperiodで初めて一意になるため)、dataの各配列を条件分岐させてinsert into するかしないかの処理をするのでしょうか?それともinsert intoのwhere句等をうまく利用して、条件にあうものだけ格納するようなやり方が一般的なのでしょうか。
まだ、初心者でどのような方法がDB処理等の負担もなくスマートなのかがイメージがわかないため、ご質問させていただいました。
イ) また、ア)の結果、必要な配列だけがDBにinsert intoできたものと仮定して、2)の問題が生じます。dataの配列の要素にはperiodに関するが含まれておりません。例えばdataの[3]
A company, 201612, 200にperiodに<id> 1,2の<period>につぐ3番を割り当てたなくてはなりません。なんとなくですが、selectのwhere句で <name>をAcompanyかつ<peiord>が最も大きい物という条件で指定し、2を取得し、これに+1を加えた数値を入れてあげるようなイメージなのですが、いかがでしょうか?
もっと一般的またはスマートな方法があればご指摘を頂ければ幸いです。
また、全体のイメージを構築している段階で文字での質問ばかりとなってしまい、申し訳ございませんが、至らぬ点があればすぐに加筆させいただきます。
何卒、よろしくお願い申し上げます。
-DB- <id> <name> <period> <periodend> <sales> 1 A company 1 201412 100 2 A company 2 201512 200 3 B company 1 201605 10 4 C company 1 201503 1000 5 C company 2 201603 2000 6 C company 3 201503 1500 7 C company 4 201603 1800
-Data- [1]=> array(A company, 201412, 100) [2]=> array(A company, 201512, 200) [3]=> array(A company, 201612, 200) //new! [4]=> array(B company, 201605, 10) [5]=> array(B company, 201611, 5) //new! [6]=> array(C company, 201503, 1500) [7]=> array(C company, 201603, 1800) [8]=> array(C company, 201703, 2000) // new! [9]=> array(D company, 201701, 5000) //new arrival!
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/21 03:09
2016/09/21 04:50