Выберите из таблицы и вставьте данные в другую - Умножьте данные -SQL - PullRequest
0 голосов
/ 18 сентября 2011

У меня есть кнопка, которая удалит всех пользователей, которые вписываются в этот запрос:

DELETE FROM users WHERE lastlogin < ".time()." - ".$sdata['activitylimit']."*3600

Хотя мне нужно взять некоторые части данных каждого пользователя и поместить их в другую таблицу («имя пользователя»)и "электронная почта")

Как я могу взять имя пользователя И электронной почты из таблицы пользователей и вставить его в мою таблицу "reserved_data"?

Таблица reserved_dataвыглядит так:

id (just the id)
data (the email or username value)
type (what type of data is it((username/email)))

Ответы [ 2 ]

0 голосов
/ 18 сентября 2011

Также вы можете использовать триггер удаления для записи данных в таблицу reserved_data. Просто переместите вставку reserved_data для запуска

Я бы не рекомендовал подход с меткой удаления. Вам это не нужно, нет необходимости восстанавливать удаленных пользователей, и это приносит много новых проблем.

0 голосов
/ 18 сентября 2011

Вы не можете сделать это напрямую, благодаря макету таблицы reserved_data.Зачем ты это делаешь?Почему у вас нет таблицы deleted_users, содержащей их имя пользователя и адрес электронной почты?Таким образом, вы можете сделать это:

$q1 = "INSERT INTO deleted_users (username, email) SELECT username, email FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)";

$q2 = "DELETE FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)";

Если вы не измените таблицу, используйте что-то вроде этого:

$toDelete = mysql_query("SELECT username, email FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)");

while($user = mysql_fetch_assoc($toDelete))
{
    mysql_query("INSERT INTO reserved_data (`data`, `type`) VALUES ('" . $user['username'] . ", 'username'");
    mysql_query("INSERT INTO reserved_data (`data`, `type`) VALUES ('" . $user['email'] . ", 'email'");
}

// Now perform the delete
mysql_query("DELETE FROM users WHERE lastlogin < (".time()." - ".$sdata['activitylimit']." * 3600)");

Вы видите, что последний требует больше кода и, как правило,плохая идея.Вы теряете связь между именем пользователя и его адресом электронной почты.

Кроме того, вы можете захотеть использовать транзакции, поскольку они могут быть не включены в первый запрос, но включены во второй.Затем вы потеряете данные этого пользователя.

И, возможно, вы сможете исправить все свои проблемы, просто добавив столбец (in)active в свою таблицу пользователей.Редко хочется по-настоящему delete данных.

...