Имеется база, в ней 2 таблицы today и history в today заносится информация об посетителях за сегодня, а в историю кроном необходимо переносить ежедневно все записи вчерашние.
На уме только такое решение
$sql = mysql_query("SELECT * FROM today WHERE date <> '$date'");
while ($row = mysql_fetch_array($sql))
{
mysql_query("INSERT INTO history 'тут заносим данных выбранные из today $row['date'] итд итп'");
mysql_query("DELETE FROM today WHERE `id` = $row['id'] LIMIT 1");
}
Может существуют методы по проще??
Спустя 25 минут, 7 секунд (12.07.2010 - 21:21) vagrand написал(а):
В MySQL есть вот такая конструкция
insert into table_name
select field1, ..., fiedlN
from table_name_2
С ее помощью ты смогеш сделать то что тебе нужно быстрее.
insert into table_name
select field1, ..., fiedlN
from table_name_2
С ее помощью ты смогеш сделать то что тебе нужно быстрее.
Спустя 8 минут, 53 секунды (12.07.2010 - 21:30) rocker написал(а):
Цитата (vagrand @ 12.07.2010 - 18:21) |
В MySQL есть вот такая конструкция insert into table_name select field1, ..., fiedlN from table_name_2 С ее помощью ты смогеш сделать то что тебе нужно быстрее. |
Так нужно еще и удалять старые данные
Спустя 21 минута, 34 секунды (12.07.2010 - 21:51) vagrand написал(а):
Ну так удали их по дате
Спустя 12 минут, 9 секунд (12.07.2010 - 22:04) sergeiss написал(а):
Цитата (rocker @ 12.07.2010 - 21:56) |
Может существуют методы по проще?? |
Можно сделать проще
Для этого просто удаляешь данные... Никаких ИНСЕРТов!!!
Но - существенно (!) - делаешь триггер на удаление, который все удаляемые данные переносит в историю (ИНСЕРТ только в триггере).
И не важно, сколько команд на удаление у тебя будет. Либо это будет группа (по дате), либо по одной строке - все они окажутся в истории.
Более того - ты можешь в истории добавить еще одно поле (плюс к основным), где будешь записывать дату удаления. Можно добавить еще и кто удалял... Короче говоря, далее всё зависит только от твоей фантазии.
Спустя 1 час, 37 минут, 57 секунд (12.07.2010 - 23:41) sergeiss написал(а):
Вот, нашел... Есть у меня тест, как раз недавно упражнялся Только этот код - для Постгре... В "дефолт БД" должно быть что-то ну очень похожее. Идея та же, только букоффки немного другие будут.
Таблица prim_01_backup содержит те же поля, что и prim_01 плюс еще два поля (отдельно дата и время удаления). А функция навешена на триггер ПОСЛЕ УДАЛЕНИЯ для таблицы prim_01.
CREATE OR REPLACE FUNCTION backup_prim_on_delete()
RETURNS trigger AS
$BODY$
begin
insert into prim_01_backup values (old.*, now(), now() );
return old;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
Таблица prim_01_backup содержит те же поля, что и prim_01 плюс еще два поля (отдельно дата и время удаления). А функция навешена на триггер ПОСЛЕ УДАЛЕНИЯ для таблицы prim_01.