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

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

新規登録して質問してみよう
ただいま回答率
85.50%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

295閲覧

1週間分のデータの取得の考え方と言うか処理のしかた

landy77

総合スコア1614

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2018/12/31 02:22

編集2018/12/31 02:52

プログラムというか考え方の質問です。
個人的にプログラムをやってきた関係で独りよがりの作り方が多いのを感じるので、
皆さんならどうする物なのかと疑問に思ったので質問とさせてください。

内容は事務系プログラムでありがちな1週間分の注文データを取得し表示すると言う物です。

超基本としては今回の場合はフォームで*年*月が選択されています。
そしてお客様希望で何週目と言う物をさらに選択して初めてデータを取得し表示させます。
カレンダーが月曜日始まりという若干面倒な話もありましたが、それ自体は問題では無くて、
こういった場合の内部処理をどうするのが良いのか?と言う話です。

まず最終的に欲しい(Vue.jsに返す)データとして

11/26 0
11/27 0
11/28 0
11/29 0
11/30 0
12/1 0
12/2 20
のようなデータをPHP側で作成してJSONでVue.jsに返してレンダリングする・・・と言う感じです。

最終的なデータを得るに当たって私としては2つのやり方が思いつきます
(やってる事は一緒ですが)

12月の第一週として11/26-12/2の日付を作成して11/26-12/2の各日付を配列に入れる・・・(1)

1.for等で回して一日ずつSQLを作成して投げる。無ければ0、あればその値を配列に入れて行く

2.BETWEENで期間内のデータを取得して配列に入れる・・・(2)
(今回だと12/2のデータのみが返ってくる)
1と同じくループで(1)の日付を順番で回し(2)の配列を日付で検索して該当すればその数値を(1)に追加?する

・1のように1週間分毎回SQLを投げる方がプログラム的には簡単ですがコスト的にどうか?
・2だとDBへの問い合わせは一回ですむ。その後の配列検索がコスト・処理スピード的にどう?

と言う質問です。

個人的には正直1は無くていつも2で処理しますが、たまに起業などに付き合うとそこのプログラムさん(他の業務と兼任みたいな人)が1のやり方をする事を定期的に見かけます。
個人的に1を辞めさせる理由が明確に説明できないので、10年以上前ならともかく、今として余りに邪道なのか判断しかねたというか証拠というかを示せないなぁと思ったので質問してみます。

色々意見が出るかもしれませんが、この辺を読んでおくと良いよ!等の示せるURL等教えて頂けたらと思います。

よろしくお願い致します。

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

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

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

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

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

m.ts10806

2018/12/31 02:38

タグは「アルゴリズム」だけの方が良い気がします。phpなりMySQLなりvueはあくまで使用例でこれら特有の課題にはならないので
guest

回答2

0

私だったら 1 の使い回しできそうな関数を採用するかと。テストも楽そうだし。
パフォーマンスを求めるなら 2 は中途半端だし、処理としてもきれいじゃない。
2 をやるなら、データベースに手を加えて、php 側のフェッチパターンまで検討して、何年/第何週のカラム作るところから始めると思います。

投稿2018/12/31 03:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

DBアクセスが1回と7回では単純にコストが7倍違いますよね。
しかも「あれば」「なければ」で分岐をかけている。
ループ自体もともとコストがかかる処理なので、なるべくループを使わずに済む方法を考えるべきだと思います。

けっこう複雑に見える取得の仕方や計算もSQLでできるのであればSQLでやってしまったほうが(表示したいデータの形式に合わせた結果)それを使うプログラム側は表示することだけ考えれば良いのでコードもシンプルになります。

まあ、それはもちろん、それ以外でもできるコスト削減対策や処理速度の対策、検索速度の対策をDBに対してもプログラムに対してもある程度できる前提とは思います。
取得するデータ量や表示するhtmlの量次第では大した差は出ないので、ケースバイケースでもあります。

投稿2018/12/31 02:27

編集2018/12/31 02:32
m.ts10806

総合スコア80765

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

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

m.ts10806

2018/12/31 02:42

余程困ってるのでなければわざわざ辞めさせることを考えなくてもいいんじゃないかなと個人的には思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問