[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перенести часть данных с их удалением
inpost
Mysql. Есть постоянно используемая таблица. Для того, чтобы она вечно не была переполнена - большую часть данных отправляю в соседнюю таблицу.
2 таблицы:
`statistic` , `statistic_old` (old - старая статистика)
Вот запрос, которые выбирает те данные, которые необходимо перенести:
SELECT * FROM `statistic` WHERE `c0` = 0
Необходимо перенести и удалить данные. Просто удалить через DELETE FROM `statistic` WHERE `c0` = 0 - не подходит, потому что к этому моменту новые данные могут быть занесены.
На уме крутится: перегнать циклом все данные на PHP, потом INSERT в другую таблицу, из этой удалять по ID записи.

Может быть есть что-то штатное в mysql для подобных операций?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
T1grOK
Зачем?
PHP выдернуть максимальный ID
- перегнать запросом
- удалить с ограничением по ID

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
inpost
Ок. ID известен.
"- перегнать запросом". Какой запрос для копирования всех данных по условию из одной таблицы в другую? Я помню, что нечто подобное есть и когда-то видел...

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
FatCat
$query1 = "SELECT MAX(id) AS maxid FROM statistic WHERE c0 = 0";
// Забираем значение для использования во втором запросе
$query2 = "DELETE FROM statistic WHERE c0 = 0 AND id<=".$maxid;


_____________
Бесплатному сыру в дырки не заглядывают...
T1grOK
"Перегнать". В самом общем случает
INSERT INTO table (SELECT * FROM....)

Но если ID идут не синхронно, тогда нужно указать конкретные поля
INSERT INTO table(поля) (SELECT поля FROM...)


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
FatCat
Цитата (inpost @ 18.11.2012 - 18:51)
Какой запрос для копирования всех данных по условию из одной таблицы в другую?

Я пользовался готовой функцией в движке нашего форума:
     function compile_db_insert_string($data) {

$field_names = "";
$field_values = "";

foreach ($data as $k => $v)
{
$v = preg_replace( "/'/", "\\'", $v );
//$v = preg_replace( "/#/", "\\#", $v );
$field_names .= "$k,";
$field_values .= "'$v',";
}

$field_names = preg_replace( "/,$/" , "" , $field_names );
$field_values = preg_replace( "/,$/" , "" , $field_values );

return array( 'FIELD_NAMES' => $field_names,
'FIELD_VALUES' => $field_values,
);

}


Работа с функцией:
$query = $DB->query("SELECT * FROM ibf_таблица1 WHERE условия");
while($row = $DB->fetch_row($query))
{
$db_string = $DB->compile_db_insert_string( $row );
$DB->query("INSERT INTO ibf_таблица2 (" .$db_string['FIELD_NAMES']. ") VALUES (". $db_string['FIELD_VALUES'] .")");
}


_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.