есть большая база MySQL на 2гига, стоит на компе (на денвере) в этой базе в столбце List записи вида "|1|2007|469|16|690|79312|11462611|70456|1903007|4910134|1796823|" Что я хочу сделать: 1)Экспортнуть записи из столбца List 2)Почистить пустые строки 3)Сделать перенос по | на новую строку 4)Удалить и посчитать дубли пробовал php скрииптом PHP: <?php /* Соединяемся, выбираем базу данных */ $link = mysql_connect("localhost", "root", "") or die("Could not connect : " . mysql_error()); mysql_select_db("b56192_ohnoes") or die("Could not select database"); /* Выполняем SQL-запрос */ $query = "SELECT * FROM `vkusers` limit 0,10000000"; $result = mysql_query($query) or die("Query failed : " . mysql_error()); /* открываю файл для записи */ $file = fopen ("group.txt","r+"); /* Выводим результаты в html */ print "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { print "\t<tr>\n"; foreach ($line as $col_value ) { $str = $col_value; if ( !$file ) { echo("Ошибка открытия файла"); } else { fputs ( $file, $str); } } } print "Complete"; /* Закрываю файл*/ fclose ($file); /* Освобождаем память от результата */ mysql_free_result($result); /* Закрываем соединение */ mysql_close($link); ?> на выхлопе худо бедно получается получить текстовик на 300 - 400 мб поделитесь мыслями как реализовать пункты 2-4 UPD: как и говорил 'худо бедно' на диапозоне записей limit 10000000,20000000 выбивает на Fatal error: Out of memory (allocated 69730304) (tried to allocate 69205996 bytes) in X:\home\1.lc\www\ex.php on line 8
$Lemur$ для того чтобы сделать 2,3,4 - вам не нужен пункт 1. Для 2 - Code: DELETE FROM `table` WHERE `List` = '' Для 3 - Code: UPDATE `table` SET `List` = replace(`List`, '|', char(10)) Для 4 - http://habrahabr.ru/qa/1708/
огрромное спасибо! Не смотря на мои опасения sql'ы сработали под PMA (боялся что выбъет по памяти) ан нет оба выполнились, 20 минут на загрузке ЦП 100% но выполнились)) осталось решить пункт 4, как удалить дубли понял осталось их посчитать
$Lemur$ Code: CREATE TABLE `dup_count` ( `id` integer NOT NULL , `cnt` integer NOT NULL , PRIMARY KEY (`id`) ); INSERT INTO `dup_count` SELECT `id`, count(*) FROM `dups` GROUP BY `val`; Чтобы потом просмотреть записи: Code: SELECT a.*, b.`cnt` FROM `table` a JOIN `dup_count` b ON a.`id` = b.`id` WHERE `cnt` > 1;