みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

作成済みのsql文を自動で実行させる方法

現在レンタルサーバーにて、不動産検索サイトの簡易的なようなものを運営しています。
phpとmysqlで動かしているのですが、新たに不動産を追加するときはあらかじめsql文作成ページで必要事項を打ち込むことで生成しておいたinsertのsql文を(一度に何行も作成しておいています)、手動で一定時間ごとにphpmyadminに直接放り込んでいます。

このあらかじめ何行も作成してあるinsertのsql文を一定時間ごとに一行一行放り込む作業を自動化したいのですが、どのようにすればいいでしょうか?
もしくはこれは根本的にできないことなのでしょうか?

よろしくお願いします。

投稿日時 - 2011-06-04 19:12:05

QNo.6786115

困ってます

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

考え方は3つあります。

(1)ガンガンデータを投入してしまい、情報公開日時をデータに設定しておく
表示の際は情報公開日時とnow()を比較する
(2)同じくデータを投入してしまい、非公開フラグを設定しておき、
cronで公開のタイミングでフラグを非公開から公開にかえる
表示の際は非公開フラグをチェックする
(3)データ投入をcronでやる
phpでやってもいいですし、mysqlにダイレクトにSQLを発行してもよいでしょう

投稿日時 - 2011-06-06 10:55:38

お礼

なるほどnow()と比較というのは思いつかなかったです。
これとcronを使ってif文でうまくできそうです。
ありがとうございました。

投稿日時 - 2011-06-08 16:56:08

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

FreeBSDならcron実行できますから。
#!/bin/sh
mysql -u ユーザー名 -pパスワード データベース名 < SQLファイル
cat < /dev/null > SQLファイル
という実行ファイルa.shを作り
flock --timeout=999 SQLファイル ./a.sh
をcronに設定します。

逆にphpでSQLファイルにINSERTコマンドを追加する際にはflockを使ってファイルロックしてからにしてください。

投稿日時 - 2011-06-06 17:46:18

お礼

シェルスクリプトに明るくなかったので少し調べましたが、こういう方法もあるのですね。
ありがとうございます。

投稿日時 - 2011-06-08 16:58:02

ANo.1

何故、打ち込んだタイミングでSQLを実行しないのですか?
作成してあるSQLはファイルなどに保存してあるのでしょうか?
レンタルサーバーのOSは何ですか(Unix/Linuxなどならcronで定期的にコマンド実行できます)?

投稿日時 - 2011-06-04 21:41:28

補足

打ち込んだタイミングでSQLを実行しない理由は、更新頻度を一定に(定期的に)保ちたいからです。
SQLは適当にテキストとして保存しています。普段そこから適宜一部を実行しています。
さくらインターネットのレンタルサーバーを使用しているのですが、調べたところ、OSの種類はUNIX系OS、OS名はFreeBSDというものです。

さくらインターネットのレンタルサーバーではcronは設定できます。
少し調べたのですが、cronを使ってphp等を動かしたとして、もとからあるSQL文を定期的に実行することはできないような気がしたのですがどうでしょうか?
私のphpのプログラミング技術の無いせいでそう感じているだけで、これはできるものなのでしょうか?
できるとすれば、どういったアルゴリズムで組めばいいのでしょうか?
よろしくお願いします。

投稿日時 - 2011-06-05 23:49:53

あなたにオススメの質問