|
|
|
| Ув. форумчане-софттаймовцы! Помогите организовать такую штуку:
Есть две таблицы:
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.
Ну и собственно сам вопрос :). Как это можно сделать одним запросом?
Заранее привелико благодарен! | |
|
|
|
|
|
|
|
для: Евгений Петров
(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 запрос. | |
|
|
|
|
|
|
|
для: Loki
(10.02.2006 в 17:51)
| | Огромное спасибо!
Если честно у меня был такой вариант, только начало выглядело примерно так:
вместо
DELETE users, confirm FROM users ...
|
Подскажите, зачаем писать эти таблицы дважды?
А про дату я немного не понял что высчитывать? Если в самом SQL запросе, то ничего сложного там нет:
... AND confirm.regtime + '".intval(3600*24*2)."' < '".time()."'"
|
А если вы про то, что потом при выводить проще, то тоже не сказал бы:
echo date("Y-m-d H:i:s",time());
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(10.02.2006 в 18:15)
| | После DELETE перечисляются таблицы из которых нужно удалить строки.
После FROM - таблицы, влияющие на отбор (WHERE) этих строк. Если запрос сложный, последних может быть больше.
Как лучше в базе представлять даты, специализированным типом или арифметическим, вопрос куда более сложный. | |
|
|
|