
こんにちは
連絡をOKの曜日を1、NGを0として0,0,0,0,0,0,0~1,1,1,1,1,1,1
の間の文字列を格納し、WHEREで利用しようと思っていたのですが
これはもしや微妙なのでは…と思ってちょっと相談に参りました
最初に考えていたのが、データ抽出を行う日の曜日をdate("w",time());
で取得し、値に対応するn番目のデータが1の場合のみHITという感じで
日,月,火,水,木,金,土の順番にデータを保持させています
(カンマ区切りでtext型になっています)
※連絡をしても良い曜日は複数でも可で、たとえば 月水金なら
0,1,0,1,0,1,0,0というデータになります
でも良く考えたら、このデータは抽出後にexplodeしないと比較データ
としては利用出来ない?と気づいて、SQL文の実行段階でデータを利用
する、いい方法は無いのかなーと思って調べてはいるのですが、どうも
良い検索キーワードが思いつかず足踏み状態です。。。
やりたいことは、月~日の曜日の間で連絡をしても良い曜日を判別して
検索した日の曜日と一致する場合に抽出を行うということです
質問内容をまとめますと
1.データ保持の方法が妥当なのかどうか
2.妥当な場合、比較の処理はSQLで出来るのか PHPで行うのか
3.SQLで出来る場合、関数のヒント
処理イメージをうまく説明出来ず伝わりにくい質問かと思いますので
補足が必要でしたらガンガン要求お願いします
構成や型の変更も何でもOKなので、こういう方法が応用きくよ、など
考え方のアドバイスも頂けると幸いです
MySQL クライアントのバージョン: 5.0.45/PHP Version 5.2.6 です。
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のチューニングに
向いていないので、データはすごく小さくなりますが、実際の
処理はおそいです。
とってもわかりやすい説明で助かりました!
まだまだ駆け出しなので SQL的、SQLらしく という言葉がどういう構成を
表すのかわからなかったのですが、非常に理解出来ました
もう一度 正規化について調べ直してみたところ、一番ダメなことを
やってるんだなーと苦笑w
バカな質問をしていたんだと今さら気が付いて恥ずかしい限りです
それにしても、構造を考えるのは難しいですね
これは色んなものを沢山作って経験を積むしかないのかな
SQLの勉強はネット検索のみ、で基礎もろくに無い状態(PHPもですが)
なので、一度くらいはキッチリ書籍などを読むべきでしょうか
オススメの書籍など、もしあれば一例挙げて頂けると嬉しいです
いつも的確な回答を下さって、yambeさんには大変感謝しています
書籍について、レスを頂けるかもと期待して 締め切りは明日にしますね
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/20060 …
参考URLと書籍紹介ありがとうございました
ラクダ本って、OREILLYの本ですよね
こちらの書籍は割といい評判を聞くので、購入を考えてみますね
本を読むだけでいきなりスキルアップとはいかないのでしょうけど
基礎や考え方を身に付けるために、一読してみようと思います
回答ありがとうございました
また質問を見かけましたら、よろしくお願い致します
No.1
- 回答日時:
まずSQLらしく作りたいなら正規化をすることです。
つまり、月~日分1案件につき1データもつわけです。
データの持ち方としては若干非効率です。
(検索性は一番高いですが)
もう一つは曜日のように7日固定で可変サイズではないような
ものはそれぞれにフィールドを用意することですね。
そうしておけば、通常の正規化データより高速になりそうです。
フィールドの使い方だけ気にするなら、ビット積をつかう処理も
考えられますが、ヒットはしますが、チューニングはできませんので
スピードは期待できません。
管理データが膨大になってくると若干時間がかかるかもしれません
アドバイスありがとうございます!(いつも助かっております^^)
>月~日分1案件につき1データもつわけです。
スミマセン こちらのデータの持ち方がイメージ出来ず…
例えば月曜日のテーブルに、シリアル番号のようなものを入れていく
とか、そういう感じですか??
大変お手数なのですが、参考例を教えて頂けると嬉しいです
曜日データは一人につき3つまで保持するので、ちょっと手抜きをして
今回の構成にしてみたのですが、やっぱりダメみたいですね笑
(これに対するレスがビット積のくだりということでしょうか)
色々な方法がありそうなので、しばらく参考意見を募りたいと思います!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 仕事術・業務効率化 頼まれてない事を自己判断でやることについて 1 2022/08/12 17:15
- Excel(エクセル) Excel 行の"〇" を検索して見出し(日付)を表示させたい 1 2022/04/04 18:35
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) Excelで作成しているシート(表) 5 2023/06/15 10:20
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- アルバイト・パート 結果として1週間無断欠勤をしてしまいました。 2 2022/10/09 08:30
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MYSQLで異なるテーブル間のデー...
-
MySQLのテーブルに、CSV形式の...
-
条件によって抽出するデータを...
-
複数表での集計値について
-
Access無いけど.mdbが見たい!
-
ACCESS 2003について
-
access 特定のレコード数までエ...
-
MySQLである項目の値の種類を求...
-
updateのパラメータを即値でな...
-
速度向上。
-
1つのSQL文で文字列を置換する...
-
ビューのソートについて
-
MySQLの容量を増やしたい
-
MySQLやSQliteの中のデータ検索...
-
EXCELデータからACCESSデータの...
-
Load Data INFILE構文について
-
データ量が多すぎると、テーブ...
-
Access リレーションのある項...
-
ORA-01401が表示され、データが...
-
データ保持の方法について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
アクセス レコードセットを更...
-
Accessのテーブルデータを一気...
-
accessでレコード更新直後の反...
-
マテリアライズドビューとスナ...
-
結合テーブルでINSERTする方法...
-
ユニオンクエリで複数ファイル...
-
ORA-01401が表示され、データが...
-
ERROR1062:Duplicate entry.......
-
住所のDBテーブル、マスターの...
-
Accessでの稼働日数計算の方法
-
ACCESSで容量が50MBになった...
-
VBAでSQLServerへのODBC接続
-
ODBC接続で新しいレコードを追...
-
処理の途中で停止させ、再開さ...
-
「クリップボードにコピーされ...
おすすめ情報