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表中显示它们对应的user_id,然后我手动将其删除。在这种特殊情况下,搜索词是“<strong>yahoo”。我搜索所有在其个人资料文章中包含“<strong>yahoo”一词的用户,并将其从用户表中删除。

问题是我有太多的搜索词来手动完成。

如果可能的话,我希望将它写在 php 文件中并通过 cron 运行。最好在 php 文件中有一个或多个字段,我将在其中键入所有可能的搜索词/短语,然后代码将一个接一个地执行所有这些。

我听说可以为此使用 cron 作业,阅读了一些关于它们的文章,但完全不知道如何处理它。

非常感谢您的帮助,如果不清楚,请告诉我。问候,伊戈尔

4

5 回答 5

3

这至少应该让你开始。请记住,我不知道您的数据库的结构,因此您可能需要更改一些内容。这也是FAR不是最有效的方法,但它很容易遵循,您可以在单个 MySQL 查询中执行此操作,而不是循环遍历每个用户 id(我展示了一个未经测试的示例 see ---faster方式---),但是我不知道您的数据库结构,因此您必须使用它,而且这种方式与您现在所做的完全一样,一次一个,因此希望它更容易遵循并且您可以修改它以提高以后的效率。在玩这个之前备份你的数据库。

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 脚本(例如,这将在午夜运行一次):

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

Deep s**t 从来都不是一个好去处......

如果您打算使用 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 标志(活/死或 '0'/'1') - 除非不需要复出。

然后,您可以使用 crontab 设置和执行它。cPanel 提供了运行 cron 脚本的能力,但您也可以使用 CLI/shell 实现相同的功能:

1. crontab -e(使用您选择的编辑器)
2. 设置0 6 * * * php /path/to/script.php(每天早上 6:00)

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。如果我不得不做这样的事情,我可能会做以下事情:

创建一个 MySQL 脚本script.sql,如下所示:

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 userdelete from user并保留语句的其余部分完全相同。

请务必在执行此操作之前备份您的用户表..

一旦您验证了 SQL 的功能是否符合您的要求,您需要编写一个小型 PHP 脚本,将该 SQL 发送到 MySQL,并让 cron 每天运行一次该脚本。

于 2012-12-08T04:17:36.840 回答
-1

您最好的选择是首先创建一个 PHP 脚本,该脚本将连接到 MySQL 并执行您想要的操作。之后,您可以查看 Cron 以及它们是如何工作的。本质上,它将以指定的节奏为您启动脚本。cPanel 有一个特殊部分,可让您安排 Cron。

于 2012-12-08T04:16:27.210 回答