• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:データ保持の方法について)

データ保持の方法について

このQ&Aのポイント
  • データ保持の方法についての相談です。データ抽出を行う日の曜日に対応するデータを格納し、SQL文の実行段階で利用する方法を探しています。
  • データ保持の方法が妥当かどうか、比較の処理をSQLで行うかPHPで行うか、SQLで行う場合の関数のヒントについてもアドバイスをいただきたいです。
  • MySQLクライアントのバージョンは5.0.45で、PHPのバージョンは5.2.6です。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>正規化 たとえば、こんなテーブルを用意するわけです。 ユーザー 曜日 田中さん 月曜 田中さん 火曜 田中さん 水曜 鈴木さん 月曜 鈴木さん 水曜 鈴木さん 金曜 木村さん 火曜 木村さん 水曜 木村さん 金曜 みたいな持ち方です。(実際にはidで管理するのが一般的かな) この場合WHERE 曜日=月曜で検索すれば田中さん、鈴木さんが ヒットしますね。これが一番SQL的なやりかたです。 >それぞれにフィールドを用意 この場合こんな感じ ユーザー 月曜 火曜 水曜 木曜 金曜 土曜 日曜 田中さん 1  1  1 鈴木さん 1     1     1 木村さん    1  1     1 (ごめんなさい、ブラウザでみると左につまっちゃうかも) テーブルが冗長になりますがこれでも WHERE 月曜=1で、田中さん、鈴木さんがヒットします >ビット積をつかう処理 月曜=1,火曜=2,水曜=4,木曜=8,金曜=16,土曜=32,日曜=64 をたします。 ユーザー 曜日 田中さん 7 鈴木さん 21 木村さん 22 となり、この場合ビット積で月曜をだしたいのであれば WHERE 曜日 & 1 で、月曜OKな人が抽出できます。 (火曜なら WHERE 曜日 & 2 ・・・) ただし前回も書きましたが、このやり方はSQLのチューニングに 向いていないので、データはすごく小さくなりますが、実際の 処理はおそいです。

koke29
質問者

お礼

とってもわかりやすい説明で助かりました! まだまだ駆け出しなので SQL的、SQLらしく という言葉がどういう構成を 表すのかわからなかったのですが、非常に理解出来ました もう一度 正規化について調べ直してみたところ、一番ダメなことを やってるんだなーと苦笑w バカな質問をしていたんだと今さら気が付いて恥ずかしい限りです それにしても、構造を考えるのは難しいですね これは色んなものを沢山作って経験を積むしかないのかな SQLの勉強はネット検索のみ、で基礎もろくに無い状態(PHPもですが) なので、一度くらいはキッチリ書籍などを読むべきでしょうか オススメの書籍など、もしあれば一例挙げて頂けると嬉しいです いつも的確な回答を下さって、yambeさんには大変感謝しています 書籍について、レスを頂けるかもと期待して 締め切りは明日にしますね

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>オススメの書籍など、もしあれば一例挙げて頂けると嬉しいです ラクダ本・・・とか言うとかっこいいところですが、私は読んだことはありません。 参考までに手元にあるMySQL関連の書籍だとこんなかんじ 1.「MySQL & PHP でつくるWebデータベース」 エーアイ出版刊 2002年 2.「MySQLによる最速RDBMS構築ガイド」ソフトバンクパブリッシング刊 2005年 3.「現場で使えるMySQL」翔泳社刊 2006年 ※実際のところ、購入当時の最新のもので、他にあまり選択肢が なかったため選んだので、今となってはだいぶ古いと思います。 ここ数年で丁寧でわかりやすい解説書がだいぶ増えたので、ご自身で 読みやすいものを探されることをお勧めします。 あとはWEBで最低限以下はみておいて損はないでしょう http://dev.mysql.com/doc/refman/4.1/ja/index.html http://www.mysql.gr.jp/ http://itpro.nikkeibp.co.jp/article/COLUMN/20060120/227621/?ST=oss

koke29
質問者

お礼

参考URLと書籍紹介ありがとうございました ラクダ本って、OREILLYの本ですよね こちらの書籍は割といい評判を聞くので、購入を考えてみますね 本を読むだけでいきなりスキルアップとはいかないのでしょうけど 基礎や考え方を身に付けるために、一読してみようと思います 回答ありがとうございました また質問を見かけましたら、よろしくお願い致します

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

まずSQLらしく作りたいなら正規化をすることです。 つまり、月~日分1案件につき1データもつわけです。 データの持ち方としては若干非効率です。 (検索性は一番高いですが) もう一つは曜日のように7日固定で可変サイズではないような ものはそれぞれにフィールドを用意することですね。 そうしておけば、通常の正規化データより高速になりそうです。 フィールドの使い方だけ気にするなら、ビット積をつかう処理も 考えられますが、ヒットはしますが、チューニングはできませんので スピードは期待できません。 管理データが膨大になってくると若干時間がかかるかもしれません

koke29
質問者

お礼

アドバイスありがとうございます!(いつも助かっております^^) >月~日分1案件につき1データもつわけです。 スミマセン こちらのデータの持ち方がイメージ出来ず… 例えば月曜日のテーブルに、シリアル番号のようなものを入れていく とか、そういう感じですか?? 大変お手数なのですが、参考例を教えて頂けると嬉しいです 曜日データは一人につき3つまで保持するので、ちょっと手抜きをして 今回の構成にしてみたのですが、やっぱりダメみたいですね笑 (これに対するレスがビット積のくだりということでしょうか) 色々な方法がありそうなので、しばらく参考意見を募りたいと思います!

関連するQ&A