将所有表的单元格值更改为零

时间:2015-01-30 19:27:29

标签: php mysql database

我有以下用户的数据库

good_user_mike
good_user_thomas
good_user_stevie
good_user_jhonathan

每个数据库都包含几个表,例如cpd,ce,ct,cg,cb,fd,gf ...这两个表都相似 它们都包含一个名为

的列名
time,visitors,clicks,leads
1,12,42,12
2,12,45,25
3,42,45,43
..
.
.

现在我的问题是,我希望将所有数据库中所有表的time = 3行设为零,以便成为

   time,visitors,clicks,leads
    1,12,42,12
    2,12,45,25
    3,0,0,0
    ..
    .
    .

是否可以使每一行的时间= 3到零?

我尝试了什么:

$hour = "3";
$sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'";
$result = mysql_query($sql);

while ($row = mysql_fetch_row($result)) {


    echo $row[0];

$slink_query = mysql_query("SELECT * FROM {$row[0]} WHERE timespan LIKE '%{$hour}%'") or die(mysql_error()); 
$slink_query_fetch = mysql_fetch_array( $slink_query );
$slink = "0";

mysql_query("UPDATE `$row[0]`
    SET `visits` = {$slink}
    WHERE timespan LIKE '%{$hour}%'");
echo $slink;

    }

    mysql_free_result($result);

1 个答案:

答案 0 :(得分:2)

如果您想要准确匹配时间,则不应使用LIKEtime LIKE '%{$hour}'会随时与3匹配,例如1330103等。只需使用=来匹配时间。

while ($row = mysql_fetch_assoc($result)) {
    $table = $row['TABLE_NAME'];
    mysql_query("UPDATE `$table`
                SET visitors = $slink, clicks = $slink, leads = $slink
                WHERE time = $hour");
}

首先也不需要进行SELECT查询。你永远不会对该查询的结果做任何事情。

要更新不同数据库中的表,您需要从TABLE_SCHEMA获取INFORMATION_SCHEMA.TABLES

SELECT TABLE_NAME, TABLE_SCHEMA
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';

然后你可以这样做:

while ($row = mysql_fetch_assoc($result)) {
    $table = $row['TABLE_NAME'];
    $db = $row['TABLE_SCHEMA'];
    mysql_query("UPDATE `$db`.`$table`
                SET visitors = $slink, clicks = $slink, leads = $slink
                WHERE time = $hour");
}