3

私は深刻な問題に陥っており、あなたのような頭の良い人からの助けが必要です。

私が使用しているソフトウェアとテクノロジーに関する情報は次のとおりです。cPanel、Linux サーバー、phpMyAdmin、MySQL。

毎日テーブルからいくつかのレコードを削除する必要があります。私は通常、phpMyAdminでSelectステートメントを使用してそれを行い、すべてのレコードを削除します。

*

Select `user_id` FROM `user`
WHERE EXISTS ( SELECT `user_id`
FROM `userinfo`
WHERE `essay` like '% yahoo %' AND user.user_id = userinfo.user_id)

*

上記のコードは基本的に、userinfoテーブルで特定の単語を検索し、対応するuser_iduserテーブルに表示します。これを手動で削除します。この特定のケースでは、検索用語は「<strong>yahoo」です。プロファイルのエッセイに「<strong>yahoo」という単語が含まれているすべてのユーザーを検索し、ユーザー テーブルから削除します。

問題は、手動で行うには検索用語が多すぎることです。

可能であれば、それをphpファイルに書き込んでcronで実行したいと思っています。php ファイルに 1 つまたは複数のフィールドがあり、考えられるすべての検索語/句を入力すると、コードがそれらすべてを次々に実行するようになると便利です。

そのためにcronジョブを使用できると聞いたことがあります。それらに関する記事をいくつか読んでいますが、それを処理する方法がまったくわかりません。

不明な点があれば教えてください。よろしく、 イゴール

4

5 に答える 5

3

これで少なくとも始められるはずです。DBの構造がわからないので、いくつか変更する必要があるかもしれません。また、これはFARによる最も効率的な方法ではありませんが、従うのは簡単です。各ユーザーIDをループする代わりに、単一のMySQLクエリでこれを行うことができます(see ---fasterのテストされていない例示します)方法---)、しかし、私はあなたのDB構造については知らないので、それをいじる必要があります.さらに、この方法はあなたが今行っていることとまったく同じことを一度に1つずつ行うので、従うのが簡単で、後でより効率的になるように変更します。これで遊ぶ前にデータベースをバックアップしてください。

あなたが望むことをするためのPHPスクリプト:

<?php
//put your search terms in this array
$search_terms = array('yahoo', 'google', 'bing');

//conenct to your DB
$db_conn = mysql_connect('yourdbhost', 'yourdbuser', 'yourdbpassword');
mysql_select_db('yourdbname', $db_conn);

//query the db for each search term
foreach($search_terms as $search_term) {
    //----slow but clear way----    
    $result = mysql_query("SELECT user_id 
                        FROM user
                        WHERE EXISTS (
                            SELECT user_id
                            FROM userinfo
                            WHERE essay like '%{$search_term}%' 
                            AND user.user_id = userinfo.user_id)", $db_conn);

    //for eachr user id returned, delete them from your users table 
    //as you would have done manually. I don't know about your users
    //table so you will have to edit this query as you see fit.
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        $user_del_result = mysql_query("DELETE FROM user 
                                        WHERE user_id = {$row['user_id']}
                                        LIMIT 1", $db_conn);
        //might want to check here to see if the query executed successfully
    }

    //----faster way----
    $result = mysql_query("DELETE FROM user
                            WHERE EXISTS (
                            SELECT user_id
                            FROM userinfo
                            WHERE essay like '%{$search_term}%' 
                            AND user.user_id = userinfo.user_id)", $db_conn);
}
?>

定期的に呼び出すには、cron ジョブを調べて (これを読んでください)、crontab で次のようなものを使用して定期的に PHP スクリプトを呼び出す必要があります (たとえば、これは 1 日 1 回深夜に実行されます)。

0 0 * * *   /path/to/php-cli /path/to/the/above/php/file.php
于 2012-12-08T04:31:24.370 に答える
2

深いクソは決して良い場所ではありません...

PHP スクリプトを使用するように設定している場合は、crontab を使用してこれを行うことができます。おそらく、最も基本的な方法として、cron を使用して実行できる PHP スクリプトを作成することをお勧めします。

<?php

  $DB_hostname = "localhost";
  $DB_name     = "someDB";
  $DB_username = "someUser";
  $DB_password = "guessmeifyoucan";

  $connection = mysql_connect($DB_hostname, $DB_username, $DB_password) or die(mysql_error());
  mysql_select_db($DB_name, $connection) or die(mysql_error());

  $delete_query = "DELETE from `user`
                   WHERE EXISTS ( SELECT `user_id` FROM `userinfo`
                   WHERE `essay` like '%yahoo%' AND user.user_id = userinfo.user_id)";

  $result = mysql_query($delete_query) or die(mysql_error());

?>

ただし、健全性のために、削除をファイルに記録するか、DB で live/dead フラグを使用することをお勧めします。ワイルドカード文字列の一致は危険であり、カムバックの必要がない場合を除き、DB フラグ (ライブ/デッドまたは '0'/'1') を使用する方がよい場合があります。

その後、crontab を使用してこれを設定および実行できます。cPanel は cron スクリプトを実行する機能を提供しますが、CLI/シェルを使用して同じことを達成することもできます:

1. crontab -e(選択したエディターを使用)
2. 設定0 6 * * * php /path/to/script.php(毎日午前 6 時)

次の形式が crontab 内で使用されます (何らかの種類の Linux を使用していると仮定します)。

Minutes [0-59]
|   Hours [0-23]
|   |   Days [1-31]
|   |   |   Months [1-12]
|   |   |   |   Days of the Week [Numeric, 0-6]
|   |   |   |   |
*   *   *   *   * php /path/to/script.php

他にもコマンド、オプション、出力がありますが、これが最も基本的な実装です。より詳細な cron の使用方法については、こちらを参照してください。

また、必要に応じて query.sql ファイルを使用し、CLI で MySQL を使用して実行することもできます。

于 2012-12-08T04:35:50.990 に答える
1

スクリプトを使用している目的では、PHP を使用する必要さえないと思います。このようなことをしなければならない場合、おそらく次のようにします。

script.sql次のように MySQL スクリプトを作成します。

USE `database_name`;

DELETE A.* FROM `userinfo` A
INNER JOIN `user` B
ON A.user_id = B.user_id
AND (
    A.essay LIKE '% yahoo %'
    OR
    A.essay LIKE '% google %'
    OR
    A.essay LIKE '% microsoft %'
);

次に、次のように cron ジョブをセットアップします。

  • シェルを開き、入力crontab -eして cron ファイルを編集します。これにより、エディター インスタンスが開きviます (使用方法を知っている必要がありますvi)。
  • 毎日のスケジュール エントリを cron ファイルに追加します0 2 * * * mysql -u{user} -p{password} {db_name} < {path of script.sql}。これにより、毎日 でスクリプトが実行されます2:00am
  • ファイルを保存して終了

検索用語を変更または追加する必要があるときはいつでも、必要に応じて行A.essay LIKE '% microsoft %'を変更して使用するだけです.

于 2012-12-08T04:34:35.033 に答える
0

select user_id from userbeに変更しdelete from user、ステートメントの残りの部分はまったく同じままにします。

これを行う前に、必ず users テーブルをバックアップしてください。

SQL が意図したとおりに機能することを確認したら、その SQL を MySQL に送信する小さな PHP スクリプトを作成し、cron でそのスクリプトを 1 日 1 回実行する必要があります。

于 2012-12-08T04:17:36.840 に答える
-1

最善の策は、MySQL に接続して目的の処理を実行する PHP スクリプトを作成することから始めることです。その後、Crons とその動作を調べることができます。基本的に、指定されたリズムでスクリプトを開始します。cPanel には、cron をスケジュールできる特別なセクションがあります。

于 2012-12-08T04:16:27.210 に答える