2つのテーブルから製品名、カテゴリ名、製品IDを取得する簡単なスクリプトをまとめました。それから、私はそのデータをとり、SEO目的のために現在持っているものよりも優れたページタイトルを作成するためにそれを使用します。何らかの理由で、私はそれが実行するのにかかる時間がかかるとは思わなかった。 7k製品があります。このPHPスクリプトをより適切に処理する方法はありますか? - タイムアウトの問題
私のホスティング会社はカスタムphp.iniの作成を許可しているので、30秒の制限時間を無効にして6000に変更することができました。しかし、スクリプトはタイムアウトします。だから私は脚本が駄目だと思った。 :)
以下はスクリプトです。タイムアウトしないようにこれを書くことができるより良い方法はありますか?それとも、私がやろうとしているのはちょっと時間がかかりますから、一度に1つのカテゴリを行うスクリプトを書く必要がありますか?
<?php
// Make a MySQL Connection
mysql_connect("localhost", "myusername", "mypassword") or die(mysql_error());
mysql_select_db("mydatabase") or die(mysql_error());
$result = mysql_query("SELECT isc_products.prodcode, isc_products.prodname, isc_categories.catname FROM isc_products, isc_categories WHERE isc_products.prodcatids = isc_categories.categoryid")
or die(mysql_error());
while($row = mysql_fetch_array($result)){
$pname = mysql_real_escape_string($row['prodname']);
$catname = mysql_real_escape_string($row['catname']);
$sitename = Sitename;
$prodcode = $row['prodcode'];
$result2 = mysql_query("UPDATE isc_products SET prodpagetitle = '$pname - $catname - $sitename' WHERE prodcode = '$prodcode'")
or die(mysql_error());
}
?>
indexes http://www.threewestcreative.com/indexes.jpg
おかげで、あなたの助けが理解されます。 :)
大変ありがとうございます!私は本当に迅速な対応に感謝します。私はデータベース(phpなし)に対して直接クエリを実行するほど単純なものを見落としたとは思えません。さあ、もう一度ありがとう!
非常に多くの行を選択しているので、Navicatのようなものを使用して、データベースがボトルネックであるかどうかを判断する(phpではなく)直接クエリを実行してみてください。 – F21
データベースでインデックスを使用していますか?それはすべての違いになります。 – Frankie
mysqlから取得したデータをmysql_real_escape_stringする必要はありません。また、あなたのサイト名の定数が表示されません?また、これを行う必要はありません。PHPを使用しなくても、選択した行からmysqlデータを更新できます。http://www.electrictoolbox.com/article/mysql/cross-table-update/ – Steven