Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Удаление из 2-х таблиц одним запросом
 
 автор: Евгений Петров   (10.02.2006 в 16:28)   письмо автору
 
 

Ув. форумчане-софттаймовцы! Помогите организовать такую штуку:
Есть две таблицы:
users           confirm
+----+-----+    +------------+--------+-----+
| id | ... |    |  regtime   | parent | ... |
+----+-----+    +------------+--------+-----+
| .. | ... |    | .......... |   ..   | ... |
| 53 | ... |    | 1139575456 |   53   | ... | 
| 54 | ... |    | 1139575698 |   54   | ... |
| 55 | ... |    | 1139575789 |   55   | ... |
| 56 | ... |    | 1139576110 |   56   | ... |
| 57 | ... |    | 1139576327 |   57   | ... |
| .. | ... |    | .......... |   ..   | ... |
+----+-----+    +------------+--------+-----+


В таблице users хранятся зарегистрированные пользователи, в ней нас интересует только поле id (auto_increment).
В таблице confirm хранятся уникальные ссылки при переходе по которым, аккаунт активируется. В это таблице нас интересуют поля regtime - время регистрации и parent - id пользователя в таблице users.
Так вот старые аккаунты (допустим более 2 суток), которые давно не активируются нужно удалять. Причем осуществляется это таким образом: Из таблицы confirm выбираются записи время которых + 3600*24*2 меньше текущего времени и после этого надо соответственно удлаить эти записи и соответствующие им в users. Т.е. предположим, что текущее время 1139748654, тогда из таблицы confirm нужно удалить следующие записи

( 1139575456 + 3600*24*2 = 1139748256 ) < 1139748654
( 1139575698 + 3600*24*2 = 1139748498 ) < 1139748654
( 1139575789 + 3600*24*2 = 1139748589 ) < 1139748654

( 1139576110 + 3600*24*2 = 1139748910 ) > 1139748654
( 1139576327 + 3600*24*2 = 1139749127 ) > 1139748654

а из таблицы users соответственно записи с id 53,54 b 55.

Ну и собственно сам вопрос :). Как это можно сделать одним запросом?
Заранее привелико благодарен!

   
 
 автор: Loki   (10.02.2006 в 17:51)   письмо автору
 
   для: Евгений Петров   (10.02.2006 в 16:28)
 


DELETE users, confirm FROM users, confirm WHERE users.id=confirm.parent AND confirm.regtime< чего-то там

но я бы хранил дату в sql формате, тогда бы это выглядело так:

DELETE users, confirm FROM users, confirm WHERE users.id=confirm.parent AND confirm.regtime< NOW()-INTERVAL 2 DAY

тогда бы не пришлось самому высчитывать сколько времени прошло, а делали бы только один sql запрос.

   
 
 автор: Евгений Петров   (10.02.2006 в 18:15)   письмо автору
 
   для: Loki   (10.02.2006 в 17:51)
 

Огромное спасибо!
Если честно у меня был такой вариант, только начало выглядело примерно так:
DELETE FROM users ...

вместо
DELETE users, confirm FROM users ...

Подскажите, зачаем писать эти таблицы дважды?

А про дату я немного не понял что высчитывать? Если в самом SQL запросе, то ничего сложного там нет:
... AND confirm.regtime + '".intval(3600*24*2)."' < '".time()."'"

А если вы про то, что потом при выводить проще, то тоже не сказал бы:
echo date("Y-m-d H:i:s",time());

   
 
 автор: Trianon   (10.02.2006 в 18:54)   письмо автору
 
   для: Евгений Петров   (10.02.2006 в 18:15)
 

После DELETE перечисляются таблицы из которых нужно удалить строки.
После FROM - таблицы, влияющие на отбор (WHERE) этих строк. Если запрос сложный, последних может быть больше.

Как лучше в базе представлять даты, специализированным типом или арифметическим, вопрос куда более сложный.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования