Мне нужно удалить некоторые данные из 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); ?>
То, что я действительно пытаюсь сделать, это:
status
= 0
в таблице, называемой subscription
и получите поле snid
(которое является целым числом) subscriber
и удалите строку с соответствующим snid
(также поле в этой строке таблиц) subscription
и удалите исходную совпадающую строку Это имеет смысл? …. Я сделал свою собственную голову, просто пытаясь объяснить это 🙁
Любая помощь или совет очень высоко ценится.
Чтобы сделать то, что вы просили, вам нужен только 1 запрос:
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;
Все, что вам нужно сделать, это создать оператор if в цикле while, чтобы проверить статус, если это 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']}"); } } }
Я добавляю дополнительную инструкцию 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;"); }
если подписчик и подписка понравились последним ключом, вы должны использовать внешний ключ с каскадом при удаленных операциях.
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html