
いつもお力を借りています、すみません。
[mysql 5.1.22-rc] [PHP 5.2.5] で、運用しています。
テーブルは[member] で抽出したいフィールドは [birthday]で date型で[1978-12-26] の様に入れています、
そのデータの中から、今日から一週間以内に誕生日の来る方にメールを出そうとしていますが
抽出が出来ません。
今やってみたのは
$from = date('Y-m-d');
$sql="SELECT * FROM member WHERE birthday BETWEEN $from AND (CURDATE() + INTERVAL 7 DAY)";
$rst = mysql_query($sql, $con);
****全レコードが出てきます。
何か見当違いな事をしているのでしょうか?
色々やっていますがうまく行きません。
ご教授、お願いいたします。
No.4ベストアンサー
- 回答日時:
>専門家だと思うのですが、
いえ、ただの一般人で、文系ですし、本職は営業系の仕事です。
>PHP Mysql を自在に操れるようになる
一介の素人の私がうんちくを語るのはおこがましいので、
申し上げることもあまりありませんが、ただ、こんな私でも書ける
のですから、普通に誰でもかけると思いますよ。
なんにせよまちがいを気にせず書いてみることです。
あとは、チューニングするためのフローに気がつけば、
それなりのプログラムになるでしょう・・・
たとえばこの板の質問だけみて書いてみて、他人の回答と
自分の答えがどう違うか見比べるだけでも他人の考え方が
盗めそうです。
アドバイス、ありがとうございました。
ずっと、yambejp さんから教えていただいて、
考えて、自分なりの方法でやってみたり。
うまく行かなくても、トライアンドエラーで随分根気良く考えられるようになりました。
最近は困ったことが無くてもこの板は見るようにしていますし、
答えようかな?と思う事があったり(自信が無いのでこの板では回答したことないですが。)
とにかくいつも勇気をもらっています!
いつもありがとうございます。
No.3
- 回答日時:
ではためしに・・・calendarといテーブルをつくります。
フィールドはdate型のd_dateを主キーとして、
char型で月と日をいれたc_mdを作り、indexを貼っておきます。
このテーブルに1900-01-01から2100-01-01まで
('1900-01-01','0101')、('1900-01-02','0102')・・・
というデータをあらかじめ仕込んどきます。
SELECT * FROM member
INNER JOIN (
SELECT calendar.d_date
FROM calendar
INNER JOIN
(SELECT c_md
FROM calendar
WHERE d_date between curdate() and curdate()+ INTERVAL 6 DAY
) AS cal2
ON calendar.c_md = cal2.c_md
) AS cal3
ON cal3.d_date=birthday
とかでどうでしょ?
この回答への補足
yambejp 様
いつもありがとうございます。
今も1時間ほど、ソースを頭の中で理解しようと(^^♪
参考書には [INNER JOIN] なども載っていますが、
このように使うとは、思いも付きませんでした。
現在、頭の中では理解いたしました!
以前から教えていただいていますが、
少しは以前より出来ることが増えてきました。
yambejp 様 は多分専門家だと思うのですが、
専門的な教育を受けていない私が、もう少しPHP Mysql を自在に操れるようになるには
どうしたらいいでしょうか?
現在はPHP Mysql の本を山ほど読んで、必要なことはネットで調べてと
ばらばらに学んでいっています。(体系的ではなく)
もしよろしければ、アドバイスをお願いいたします。
No.2
- 回答日時:
そのままSQLだけでやると結構面倒そうですね。
ストアードプロシージャやらなにやらつかったり・・・
それでもチューニングが面倒だったりいろいろ問題がありそうです。
おもいきって誕生日管理用にテーブルを一つ用意してみてはどうでしょう?
項目としては1900年から2100年あたりまで連番でとっておいて、
その月日をもっているだけでよいかと思います。
それを絡めれば低レベルのSQLでJOINするだけで処理ができそうです
この回答への補足
いつもご教授ありがとうございます。
>誕生日管理用にテーブルを一つ用意
すみません、どのような物を作れば良いのか全くわかりません。
お手数ですが、もう少しアドバイスをお願いいたします
この方法でダメなら、同じテーブル内で
yyyy mm dd を yyyy mmdd と2つのフィールドに分けて
何とかやろうと考えていました。
No.1
- 回答日時:
$sql="SELECT * FROM member WHERE birthday BETWEEN '$from' AND (CURDATE() + INTERVAL 7 DAY)";
これでできませんかね?
$from変数に'(シングルクオーテション)がついてないからだと思います。
この回答への補足
早々にアドバイスありがとうございました。
構文はそれで正しかったと判りました。m(__)m
(シングルクオーテション)
ソースをコピーして、そのまま使わせていただきましたが、
今度は1件もヒットしませんでした。
もしかしてと思い、2009-03-25 にするとヒットしました。
月日だけで BETWEEN を使うのは間違っているのでしょうか?
若しくは、月日だけでフィールドを別途用意しないとダメでしょうか?
**そうすると、年をまたいだ時にどうなるかとか、また考えないといけないかもと思い。
**このようにしてみたのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Visual Basic(VBA) SQLで抽出 4 2022/12/04 13:55
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
ビューのソートについて
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
SQL文の結合(一対多)がわから...
-
アクセス レコードセットを更...
-
Oracleで上書きImportはできま...
-
結合テーブルでINSERTする方法...
-
Accessのテーブルデータを一気...
-
[mysql]selectが遅い場合と早い...
-
【mysql : HTML】チェックボッ...
-
VBAでSQLServerへのODBC接続
-
Access(MDB)の複製(レプリケー...
-
MySQLやSQliteの中のデータ検索...
-
Access無いけど.mdbが見たい!
-
MySQLのDB内容をWEB上に表示す...
-
同一テーブルのデータを参照し...
-
accessでレコード更新直後の反...
-
ODBC接続で新しいレコードを追...
-
クロス集計されたデータを元に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
ビューのソートについて
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
アクセス レコードセットを更...
-
このISAMでは、リンクテーブル・・
-
住所のDBテーブル、マスターの...
-
結合テーブルでINSERTする方法...
-
同一テーブルのデータを参照し...
-
マテリアライズドビューとスナ...
-
htmlコードで書かれた表にphpで...
-
accessでレコード更新直後の反...
-
IF NOT EXISTを使用するINSERT文
-
Access VBAからエクセルに出力...
-
ORA-01401が表示され、データが...
-
構文エラー : 演算子がありませ...
-
ERROR1062:Duplicate entry.......
-
ODBC接続で新しいレコードを追...
-
「クリップボードにコピーされ...
おすすめ情報