我有以下用户的数据库
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);
答案 0 :(得分:2)
如果您想要准确匹配时间,则不应使用LIKE
。 time LIKE '%{$hour}'
会随时与3
匹配,例如13
,30
,103
等。只需使用=
来匹配时间。
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");
}