[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: limit более 10000
1limit
Здравствуйте!


func_query("SELECT * FROM tbl limit 10000");

limit сейчас срабатывает, если его сделать более этой цифры, то не срабатывает.

эти настройки не помогают
сделал ini_set("memory_limit","128M");
set_time_limit(500);


спасибо!





Спустя 12 минут, 1 секунда (19.10.2011 - 18:36) m4a1fox написал(а):
Может сделать по кусочкам через sleep()?

Спустя 7 минут (19.10.2011 - 18:43) Guest написал(а):
И зачем тебе 10000 строк из таблицы за раз?

Спустя 2 минуты, 12 секунд (19.10.2011 - 18:45) Игорь_Vasinsky написал(а):
Чтоб браузер с большой прокруткой отобразил страницу.. этож весело на ноуте...

Спустя 6 минут, 43 секунды (19.10.2011 - 18:52) Guest написал(а):
да ладно вам парни, шутить))!

нужно за раз, реорганизовать большую базу, можно за два раза, но уже хуже, могут быть ошибки)

может есть еще варианты, как увеличить память, если в этом проблемы

Спустя 2 минуты, 26 секунд (19.10.2011 - 18:54) Игорь_Vasinsky написал(а):
Так надо плисать от нотиса или варнинга, на что ругается то?

Спустя 6 минут, 19 секунд (19.10.2011 - 19:01) Guest написал(а):
Тогда пишем func_query("SELECT * FROM tbl");
и получаем всю таблицу.

Спустя 1 минута, 30 секунд (19.10.2011 - 19:02) Guest написал(а):
да, дельный совет про ошибки, спасибо!

придется по частям

Allowed memory size of 134217728 bytes exhausted

Спустя 1 минута, 27 секунд (19.10.2011 - 19:04) Guest написал(а):
в htop проц зашкалил от нагрузки)

Спустя 2 минуты, 41 секунда (19.10.2011 - 19:06) Игорь_Vasinsky написал(а):
Guest
ну тогда ставь sleep() начни с 1сек, там посмотри, можешь увеличивать.

Спустя 7 минут, 40 секунд (19.10.2011 - 19:14) Zerstoren написал(а):
Может стоит делать unset ?
mysql_free_result ?

и другие манипуляции с памятью?
В конце концов, напишите о размере памяти прямо в php.ini

Спустя 6 минут, 47 секунд (19.10.2011 - 19:21) Семён написал(а):
Ради интереса, что у вас там за манипуляции?

Спустя 20 минут, 36 секунд (19.10.2011 - 19:41) Игорь_Vasinsky написал(а):
Guest
Цитата
нужно за раз, реорганизовать большую базу, можно за два раза, но уже хуже, могут быть ошибки)

Спустя 2 минуты, 13 секунд (19.10.2011 - 19:43) Guest написал(а):
не понял я как sllep пользоваться

вот идет запрос
mysql_result(..... limit 50000)

ставим sleep(5)

и что должно произойти, он же запрос на сервак отправляет, тот там вещает проц.,


настройки php.ini лучше не трогать

mysql_free_result только при отдаче скрипту поможет, у меня же вешает там на сервере

Ради интереса, что у вас там за манипуляции? - да жизнь заставила), надо базу реорганизовать, а записей тыщаа

Спустя 3 минуты, 1 секунда (19.10.2011 - 19:47) Игорь_Vasinsky написал(а):
Нужно делать запросы с задержкой в sleep(1);

Т.е. если ты знаешь скока строк в БД, ты разделяешь свои запросы на n-кол-во (допустим с лимитом в 1к - всё заботает, значит нужно кол-во строк/1000 - стока раз зделать запрос, каждый раз смещая LIMIT на 1000)
и после каждого запроса sleep(1)

Спустя 12 минут, 1 секунда (19.10.2011 - 19:59) Nikitian написал(а):
Не надо никаких задержек.
Тут 2 варианта проблемы:
1) скрипт не может получить результат запроса от бд - тут поможет mysql_unbuffered_query().
2) скрипт получается данные от бд, но в процессе обработки идёт накапливание и вылет с ошибкой. В этом случае надо не держать в памяти много данных.

Спустя 1 час, 4 минуты, 1 секунда (19.10.2011 - 21:03) Guest написал(а):
не знаю как бороться с этим, если только по частям, делая по 1000 выборку, перезагрузка страницы, опять загрузка скрипта, опять перезагрузка ...



ini_set("memory_limit","125M");
set_time_limit(60);

$limit = 1000;

$count_rows = func_query("SELECT count(*) ...");
$cnt_rws = count($count_rows); // 14000 записей

$arr = array();

if ($cnt_rws) {
for ($t = 0; $t<=$cnt_rws; $t = $t + $limit)
{

ЕСЛИ использвать этот код
= mysql_unbuffered_query("select .....
limit
$t, ".($t+$limit));

while ($row = mysql_fetch_assoc($c)) {
$arr[] = $c;
}

sleep(2);

ТО Fatal error: Allowed memory size of 131072000 bytes exhausted


ЕСЛИ использвать этот код
= mysql_func_query("select .....
limit
$t, ".($t+$limit));
где mysql_func_query получаем масссив обычными mysql функциями
if (count($c)) {
foreach($c as $c) {
$arr[] = $c;

}
}


sleep(2);

ТО загружает двух ядерный проц и приходиться убивать процесс

}
}

Спустя 3 минуты, 45 секунд (19.10.2011 - 21:06) Nikitian написал(а):
Не пихайте все получаемые данные в массив - так память и засерается. получили данные - сделали с ними что-то и уничтожили. Не надо всё в память пихать, она не резиновая.

Спустя 1 минута, 33 секунды (19.10.2011 - 21:08) imbalance_hero написал(а):
Guest
Делаешь выборку на 100-500 записей, в цикле, потом берёшь выбор следующих записей, при этом не забываешь free_result применять, чтобы очищать результат выборки, и убивай все переменные, которые на пути встречаются, чтобы можно было жить.
И sleep не нужен тут. Просто запустил циклом, обработал - пошел дальше.
Только я не понимаю, зачем ты создаёшь мега-громадный массив? Для чего?

Спустя 12 часов, 58 минут, 27 секунд (20.10.2011 - 10:06) Guest написал(а):
в общем само задание), видимо с него и надо было начать) наверно не хватает опыта решить самому

есть таблица записей 14 тысяч
id int autoincrement primary key
name varchar
soname varchar

Здесь есть как строки с уникальными, в единственном числе name и somane, так и по несколько строк с одними и теми же name и somane.
например
1 neek fed
2 vet ked
3 ved ked
4 dsd wds
5 dsd wds

В таблице нужно выбрать строки с одинаковыми name и somane, правильней сказать наборы строк, и эти наборы с одинаковыми name и somane обработать

вывод может быть такой, limit 150 строк, поскольку в php сделаю цикл по обходу всей таблице, пока всю ее не обойду
2 vet ked
3 ved ked
4 dsd wds
5 dsd wds

Как это можно сделать )?

Спустя 1 час, 48 минут, 31 секунда (20.10.2011 - 11:55) imbalance_hero написал(а):
Guest
не СОНЕЙМ, а сЁнейм, ё = ur, surname smile.gif

Там тебе надо выбрать дубли, где и фамилия и имя одинаковые? Или где одинаковое только имя или только фамилия? Я что-то не понял, что должно быть одинаковым?
Тебе надо именно выбрать дубликаты записей по фамилии и имени?

Спустя 1 час, 2 минуты, 38 секунд (20.10.2011 - 12:57) Guest написал(а):
тебе надо именно выбрать дубликаты записей по фамилии и имени?

верно верно

Спустя 45 минут, 33 секунды (20.10.2011 - 13:43) imbalance_hero написал(а):
Тебе надо со всеми записями сделать изменения? Или с одной из них?

Спустя 5 минут, 55 секунд (20.10.2011 - 13:49) Guest написал(а):
из 14000 записей выбрать все дубликаты, и с этими дубликатами совершить определенные действия, связанные с другими таблицами.

в общем то я практически решил задачу, может не оптимально, но проц уже загружается на 30 процентов при выполнении сктипта и работает он 60 секунд. Если предложите алгоритм или как лучше решить, будет очень интересно посмотреть

Спустя 28 минут, 3 секунды (20.10.2011 - 14:17) imbalance_hero написал(а):
Guest
SELECT * FROM `table`
WHERE CONCAT(`name`,`surname`) IN (
SELECT CONCAT (`name`,`surname`)
FROM `table`
GROUP BY `surname`,name
HAVING COUNT(*) > 1
)

Не пробовал делать выборку в таком стиле как concat, можно попробовать так.

К тому же выборка из БД идёт одна, она даже при максимуме будет несколько секунд идти, вся нагрузка лежит уже на обработке данных, полученных после запроса.

Так почему же ты в таком случае жалуешься на запрос? Мне кажется, что вся задержка как раз в другом месте.

Спустя 2 часа, 19 минут, 54 секунды (20.10.2011 - 16:37) Guest написал(а):
в общем, я понял где ошибся, и как надо было делать первоначально, вообще то зря недооценивал Mysql, когда была возможность, надо было изучать мускул, печалька)

помогите пжст запрос исправить, который есть. я его как смог поправил, но не работает пока, в стиле как concat

сейчас ругается на #1054 - Unknown column 'c.firstname' in 'on clause'

select c.id, c.email, c.firstname, c.lastname, ab.zipcode, count(*) as orders_cnt_per_account 
from cot c, add_book as ab, ordrs as o

JOIN (
select c.id, c.email, c.firstname, c.lastname, ab.zipcode, COUNT(*) cnt
from cot c, add_book as ab, ordrs as o
where o.userid=c.id and ab.userid=c.id and ab.default_b = 'Y'
group by c.firstname, c.lastname
HAVING cnt>1
) t2
ON (c.firstname= t2.firstname AND c.lastname= t2.lastname)

where o.userid=c.id and ab.userid=c.id and ab.default_b = 'Y'
group by c.id
order by c.email;


Спустя 16 минут, 55 секунд (20.10.2011 - 16:54) imbalance_hero написал(а):
Guest
Когда делаешь подзапрос, имена другие таблицам давай, потому что одно имя перебивает второе.
Быстрый ответ:

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