我需要从mysql中删除一些数据。我知道一些php,但对mysql真的很着迷,真的不想把它搞砸。。。我确实做了一个.sql备份,但我需要把它做好。这就是为什么我在这里发布这个问题。我知道我会因为不尝试自己并在这里发布我的代码而受到一些指责,但我很乐意。。这是我被卡住之前的最远距离:
<?php
$con = mysql_connect("localhost","USERNAME","PASSWORD");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("DATABASE", $con);
$result = mysql_query("SELECT * FROM subscriber");
while($row = mysql_fetch_array($result))
{
echo $row['mail'] . " " . $row['snid'];
echo "<br />";
}
mysql_close($con);
?>
我真正想做的是:
- 在名为
subscription
的表中查找status
=0
的所有行,并获取字段snid
(它是一个整数) - 然后转到名为
subscriber
的表,删除具有匹配snid
的行(也是该表行中的字段) - 然后返回
subscription
并删除原始匹配行
这有意义吗?。。。。我已经尽力解释了:(
要完成您的要求,您只需要一个查询:
delete subscriber, subscription from subscriber,subscription where subscription.status = 0 and subscription.snid=subscriber.snid;
试试这样的东西:
DELETE a,b FROM subscriber AS a INNER JOIN subscription AS b ON a.snid = b.snid WHERE b.status = 0;
您所需要做的就是在while循环中创建一个if语句来检查状态,如果状态为0,则对两个表执行删除。这是while循环的代码:
while($row = mysql_fetch_array($result))
{
if($row['status']==0) {
if(mysql_query("DELETE FROM `subscriber` WHERE `snid`={$row['snid']}") {
mysql_query("DELETE FROM `subscription` WHERE `snid`={$row['snid']}");
}
}
}
我在您的delete上添加了一个if语句,这样,如果它不从订阅表中删除,它也不会从订阅者表中删除。
$result = mysql_query("SELECT * FROM subscriber WHERE status=0");
while($row = mysql_fetch_array($result)) {
mysql_query('DELETE FROM subscription WHERE snid =' . $row['snid']);
mysql_query('DELETE FROM subscriber WHERE id =' . $row['id']);
}
这应该可以工作。
$result = mysql_query("SELECT * FROM subscription WHERE status = 0;");
while($row = mysql_fetch_array($result))
{
$snid = $row['snid'];
mysql_query("DELETE FROM subscriber WHERE snid = $snid;");
mysql_query("DELETE FROM subscription WHERE snid = $snid;");
}
如果snid密钥喜欢订阅者和订阅,则应该使用带有级联删除操作的外键。
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html