PDA

Просмотр полной версии : вопрос по limit


durito
17.11.2010, 15:03
ни как не пойму, если сливать базу через скуль-инъекцию через limit то сливает от силы 20-30К, если же через where+id= то тянешь всю базу на 200-300К. да понятно что там не все записи, но почему такая разница? почему limit выводит лишь часть?

с чем это может быть связано?

Lestatkiy
17.11.2010, 15:10
Дословно http://translate.google.com/?hl=ru&tab=wT#en|ru|limit =)

А так кто знает, может пора с руками к батарее, или собиратся у костра одтанцовывать

z0mbyak
17.11.2010, 16:38
ID это жесткое условие, а лимит это лимит...

Hanata
18.11.2010, 21:30
Как сказал z0mbya: лимит это лимит...

limit - это предел с n по m-записей.

Прежде чем что-то "хакать и сливать", надо учить то, что ломаешь.

man sql.

_http://www.softtime.ru/bookphp/gl12_9.php

durito
19.11.2010, 12:43
Как сказал z0mbya: лимит это лимит...
limit - это предел с n по m-записей.
Прежде чем что-то "хакать и сливать", надо учить то, что ломаешь.
man sql.
_http://www.softtime.ru/bookphp/gl12_9.php


это понятно, что ничего не понятно

дело в том, что к примеру count(*) показывает что в базе 300000 записей, я понимаю, что не все они полные, где-то отсутсвуют некоторые записи в полях таблицы

но вот вывод через limit+$n,1 позволяет вывести к примеру всего 20-30К, а вот если выводить через memberid=$n то выводишь все записи, допустим 250К, так как 50К пустые

вот и вопрос, почему такая разница?

z0mbyak
19.11.2010, 12:59
Вот тебе же правильно сказали, учи что ломаешь!

Вывод у тебя из базы как выглядит? concat(), concat_ws, group_concat???

Помимо всяких "не нужных" настроек в mysql есть еще такие параметры как group_concat_max_len (по умолчанию 1024) и max_allowed_packet (по умолчанию 1 048 576), вот как ты думаешь сможешь за один запрос вывести больше чем можно??? Вот тебе и ответ, а по id у тебя выводится конкретная запись, которая полюбому меньше чем заданный предел!

Я же сказал, что id это жесткое условие, а лимит это лимит!

durito
19.11.2010, 13:05
Вот тебе же правильно сказали, учи что ломаешь!
Вывод у тебя из базы как выглядит? concat(), concat_ws, group_concat???
Помимо всяких "не нужных" настроек в mysql есть еще такие параметры как group_concat_max_len (по умолчанию 1024) и max_allowed_packet (по умолчанию 1 048 576), вот как ты думаешь сможешь за один запрос вывести больше чем можно??? Вот тебе и ответ, а по id у тебя выводится конкретная запись, которая полюбому меньше чем заданный предел!
Я же сказал, что id это жесткое условие, а лимит это лимит!


спасибо, понял про ограничение, но вот столкнулся с тем, что вывод одного поля select+email+from+users совершенно разный по limit и id.

вот этого я понять не смог

z0mbyak
19.11.2010, 13:09
Как вариант, записи в таблице могут идти не по порядку (например id=65, id=88, id=1 и тд), поэтому и будет разница, так как лимит берет, например с первой строки по сотую, а по id у тебя получается, например id=1 находится в 101 строке....

Попробуй проверить какой майл к какому id соответствует

concat_ws(0x3a,email,id)

Или выводятся совсем разные данные? (Не то, что должно)

durito
19.11.2010, 16:51
нет, данные одни и те же, но выводится разное их количество

всем спасибо за советы

Hanata
19.11.2010, 18:42
Мне кажется, что гораздо проще начать с изучения sql,с основ, потом будет гораздо проще, и все вопросы такого рода отпадут сами собой. Да и знания не лишние

Реляционная бд - штука непростая, но от этого её изучение становится только интересней.

Удачи Вам в вашем начинании)

aka PSIH
19.11.2010, 18:57
z0mbyak


Помимо всяких "не нужных" настроек в mysql есть еще такие параметры как group_concat_max_len (по умолчанию 1024) и max_allowed_packet (по умолчанию 1 048 576), вот как ты думаешь сможешь за один запрос вывести больше чем можно??? Вот тебе и ответ, а по id у тебя выводится конкретная запись, которая полюбому меньше чем заданный предел!


причем тут все эти ограничения, когда ТС ясно указал что он выводит за раз - одну запись из базы?


limit+$n,1


durito

Было подобное несколько раз, попробуй так перебирать limit+$n,99999999

Выводить будет все-равно по одной записи, но должен вывести все 250к...