PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 10
Ivanezko Отправлено: 24 Октября, 2007 - 11:47:29 • Тема: случайная запись в MySQl • Форум: Программирование на PHP

Ответов: 25
Просмотров: 5288
Очевидно вы правы.
Ivanezko Отправлено: 23 Октября, 2007 - 19:03:03 • Тема: случайная запись в MySQl • Форум: Программирование на PHP

Ответов: 25
Просмотров: 5288
По моим тестам не фул скан а только до нужной записи
т.е. лимит 10,1 - быстро
лимит 1000,1 - средне
лимит 1000000,1 - медленно
Ivanezko Отправлено: 23 Октября, 2007 - 08:01:01 • Тема: случайная запись в MySQl • Форум: Программирование на PHP

Ответов: 25
Просмотров: 5288
EuGen пишет:
Такой вариант не подойдет, потому что нет никакой гарантии в том, что поле первичного ключа будет представлять собой правильную последовательность 1,2,3, ..., N, ... "без дыр"

Удивил.
Не надо путать
LIMIT $k
и
WHERE id=$k
Ivanezko Отправлено: 22 Октября, 2007 - 20:15:13 • Тема: случайная запись в MySQl • Форум: Программирование на PHP

Ответов: 25
Просмотров: 5288
Whitex пишет:
незнаю было или нет такое предложение:
$r = mysql_query("SELECT * FROM `TABLE` LIMIT ".$k.",1");

"SELECT * FROM `TABLE` LIMIT ".$k.",1" - парадокс, но это небыстрый запрос, и скорость падает (sic!) при увеличении $k.
т.е. если выбирать 1 запись - ваш вариант вполне подходит.
А если 10 или 20 ?
Ivanezko Отправлено: 18 Октября, 2007 - 16:37:32 • Тема: Таблица в ячейке • Форум: HTML, Дизайн & CSS

Ответов: 3
Просмотров: 3213
Возможны варианты.
Код пожалуйста.
Ivanezko Отправлено: 17 Октября, 2007 - 09:34:03 • Тема: Редакторы PHP • Форум: Программное обеспечение

Ответов: 421
Просмотров: 254223
Zend Neon beta уже кто-то скачал? Пользуюсь второй день.
Пока доволен.
Вот только оперативку надо до 2Г поднимать.
Ivanezko Отправлено: 16 Октября, 2007 - 10:54:47 • Тема: автозамена • Форум: Программирование на PHP

Ответов: 10
Просмотров: 837
В принципе многие среды позволяют делать замену во многих файлах.
DW отлично заменяет
ZDE тормознуто.
вот маленькая утилитка которая замечательно делает замены в файлах
http://softsearch[dot]ru/programs/97[dot][dot][dot]r-download[dot]shtml
Ivanezko Отправлено: 14 Октября, 2007 - 12:28:36 • Тема: Секунды в минуты • Форум: Программирование на PHP

Ответов: 9
Просмотров: 2520
Усовершенствуем!

Подмигивание
Ivanezko Отправлено: 14 Октября, 2007 - 11:57:21 • Тема: Что быстрее? • Форум: SQL и Архитектура БД

Ответов: 8
Просмотров: 95
evgenijj пишет:

Но вообще -- второй вариант не имеет смысла -- в цикле выполняется запрос
SELECT * FROM `mytable` LIMIT $i, 1;
Поскольку запрос не содержит ORDER BY будут возвращаться СЛУЧАЙНЫЕ записи.

Ах как было бы прекрасно если бы это было так!
По моим наблюдениям по умолчанию используется сортировка по основному ключу (обычно это автоинкрементный id).
Возможно и не так, но уж точно не рандомно, увы...
Ivanezko Отправлено: 13 Октября, 2007 - 12:22:45 • Тема: случайная запись в MySQl • Форум: Программирование на PHP

Ответов: 25
Просмотров: 5288
valenok пишет:
Давай тогда ещё раз.

Что у нас происходит когда мы выполняем следующий запрос: ?
SELECT * FROM `table` WHERE `char`='A' AND `num`=1 ORDER BY RAND() LIMIT 1


К сожалению, MySQL генерит дополнительное поле (виртуальное) и генерит случайные числа для каждой записи.
Потом проводит сортировку по этому полю - ВСЕЙ таблицы.
и только потом выбирает количество записей указанное в LIMIT.
Если записей в таблице менее тысячи - можно и ORDER BY RAND() использовать.
У меня их 300к+. Запрос отрабатывает около 500 секунд.
Грустно это все. Уже неделю ищу решение.
Вот хорошая статья: http://jan[dot]kneschke[dot]de/projects/[dot][dot][dot]ql/order-by-rand , но простой способ дает у меня для сложного запроса с джойнами около 1 секунды для 1 результата (а мне их надо 15) - итого 15 секунд.
а способ с введением доптаблицы для holes мне не нравится.

В результате пришел к нечестной выборке:
1) взять кол-во записей удовлетворяющих запросу - $total
2) ПХПой сгенерить рандомное "окно" в промежутке 0<$randnum<($total-1000)
3) запрос LIMIT $randnum, 1000
4) shuffle($res)
5) array_slice($res, 0, сколько_надо_в_результате);
Этот метод дает в общем-то рандомный результат и работает очень быстро по сравнению с другими (на все про все около секунды).
Правда не очень честный - все результаты находятся в пределах "окна" в 1к записей.

Если кто-то найдет более честный способ - пожалуйста отпишите буду очень признателен.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB