2012-04-26 2 views
0

Я пытался выяснить, как удалить данные из нескольких таблиц в базе данных. Чтобы дать некоторый фон, есть таблица пользователей, содержащая основную информацию, такую ​​как имя и фамилия. Затем есть таблица входа, в которой хранятся пароли и имена пользователей. Я создаю страницу администратора, которая позволяет мне видеть список пользователей с информацией из обеих таблиц. Эта часть отлично работает. Моя проблема заключается в создании скрипта удаления. Я пробовал делать отдельные запросы, но я никуда не денусь. Может кто-нибудь дать мне какое-то направление? Или, по крайней мере, где-нибудь, где я могу это прочитать?Удаление данных из нескольких таблиц в базе данных

// Get IDs 
$lid = $_POST['lid']; 
$uid = $_POST['uid']; 

// Delete the product from the database 
require_once('database.php'); 

$query = "DELETE user,login FROM user INNER JOIN login ON user.uid = '$uid' AND login.lid= '$lid'"; 
$db->exec($query); 
+0

Вы не можете делать подобные соединения в DELETE. Просто используйте два оператора DELETE. – Wyzard

+0

Используйте внешние ключи, которые каскадом, поэтому, когда вы удаляете пользователя, все связанные данные с этим пользователем также автоматически удаляются – Esailija

+0

И помните, что вам не нужно делать жесткое удаление. В таблице может быть поле, в котором будет записана запись удаленной записи. И когда вы сделаете удаление, просто обновите значение в поле. Возможно, вызывается поле удалено, а для значения 0 оно активно и для значения 1 удалено. Таким образом, вы можете восстановить данные, если не хотите их удалить. –

ответ

2

добавить внешний ключ, а затем в вашем использовании определения столбца ON DELETE CASCADE, которая будет заботиться о удалении ребенка строки, когда родительская строка удаляется

+0

+1 - Предполагается, однако, что используемая база данных поддерживает внешние ключи с каскадным удалением (например, не все серверы хранения MySQL), и что между таблицами существует отношение внешнего ключа - вопрос не включает любые предикаты, указывающие, что обе таблицы используют ключ. –

+0

Большое вам спасибо! Я читал об этом, и я понимаю. Я получил код. – user1359930

0

Это будет зависеть от базы данных (и, возможно, какие ограничения на месте), можете ли вы сделать это в одном заявлении DML. Тем не менее, более простой вариант состоит в том, чтобы сделать что-то подобное, используя два оператора DML.

$query = "DELETE FROM user WHERE user.uid = '$uid'"; 
$db->exec($query); 
$query = "DELETE FROM login WHERE login.lid= '$lid'"; 
$db->exec($query); 
+0

спасибо за ваш вклад :) – user1359930

Смежные вопросы