- ベストアンサー
作成済みのsql文を自動で実行させる方法
現在レンタルサーバーにて、不動産検索サイトの簡易的なようなものを運営しています。 phpとmysqlで動かしているのですが、新たに不動産を追加するときはあらかじめsql文作成ページで必要事項を打ち込むことで生成しておいたinsertのsql文を(一度に何行も作成しておいています)、手動で一定時間ごとにphpmyadminに直接放り込んでいます。 このあらかじめ何行も作成してあるinsertのsql文を一定時間ごとに一行一行放り込む作業を自動化したいのですが、どのようにすればいいでしょうか? もしくはこれは根本的にできないことなのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
考え方は3つあります。 (1)ガンガンデータを投入してしまい、情報公開日時をデータに設定しておく 表示の際は情報公開日時とnow()を比較する (2)同じくデータを投入してしまい、非公開フラグを設定しておき、 cronで公開のタイミングでフラグを非公開から公開にかえる 表示の際は非公開フラグをチェックする (3)データ投入をcronでやる phpでやってもいいですし、mysqlにダイレクトにSQLを発行してもよいでしょう
その他の回答 (2)
- nora1962
- ベストアンサー率60% (431/717)
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を使ってファイルロックしてからにしてください。
お礼
シェルスクリプトに明るくなかったので少し調べましたが、こういう方法もあるのですね。 ありがとうございます。
- nora1962
- ベストアンサー率60% (431/717)
何故、打ち込んだタイミングでSQLを実行しないのですか? 作成してあるSQLはファイルなどに保存してあるのでしょうか? レンタルサーバーのOSは何ですか(Unix/Linuxなどならcronで定期的にコマンド実行できます)?
補足
打ち込んだタイミングでSQLを実行しない理由は、更新頻度を一定に(定期的に)保ちたいからです。 SQLは適当にテキストとして保存しています。普段そこから適宜一部を実行しています。 さくらインターネットのレンタルサーバーを使用しているのですが、調べたところ、OSの種類はUNIX系OS、OS名はFreeBSDというものです。 さくらインターネットのレンタルサーバーではcronは設定できます。 少し調べたのですが、cronを使ってphp等を動かしたとして、もとからあるSQL文を定期的に実行することはできないような気がしたのですがどうでしょうか? 私のphpのプログラミング技術の無いせいでそう感じているだけで、これはできるものなのでしょうか? できるとすれば、どういったアルゴリズムで組めばいいのでしょうか? よろしくお願いします。
お礼
なるほどnow()と比較というのは思いつかなかったです。 これとcronを使ってif文でうまくできそうです。 ありがとうございました。