Делаем случайную выборку. Аномалии

alex234

Guest
Делаем случайную выборку. Аномалии

MySQL, таблица, в ней всего три строчки для примера.
Делаем случайную выборку:
select * from portfolio order by rand()
пробуем, выдает все значения кроме третьей по счету строки

select * from portfolio order by rand() limit 1, 1
пробуем, выдает все значения кроме второй по счету строки


Что происходит?
 

Лексеич

Московский калмык
в БД вроде нет понятия первая строка, вторая строка.. или я ошибаюсь?
 

alex234

Guest
Автор оригинала: Лексеич
в БД вроде нет понятия первая строка, вторая строка.. или я ошибаюсь?
Имеется ввиду, что она всегда не отдает какую-нибудь одну строчку. Тестил долго и упорно.
 

alex234

Guest
<?
$query=mysql_query("select * from portfolio order by rand() limit 2, 1");
if(mysql_num_rows($query)>0):
while($banner=mysql_fetch_assoc($query)){
print("$banner[name]<br>");}
endif;
?>

Версия MySQL: 3.23.53
Версия PHP: 4.3.6

Дамп: http://alpha.adventureworld.ru/portfolio.sql
 

XStudent

Новичок
Что-то мне не понятно в запросе - получается "выбрать * из portfolio сортируя случайно вернуть две строки начиная со второй". Что именно тебе не нравится?
 

alex234

Guest
вернуть одну со второй.
Экспериментирую с лимитами. А суть одна: делаем ~100 запросов и ни в одном случае она не отдает одну строчку.
 

alex234

Guest
Чем сие обусловлено не ясно, но нашел работающее решение:
ORDER BY MD5(RAND());

что скажете?

-~{}~ 26.04.05 18:24:

Автор оригинала: vafel
токо что тестил без лимита все нормалтно ...
ну возврощает она все, тока если без лимита, то смотри тока первую. все туда сортируются периодически? или тока две на первой позиции в массиве?
 

XStudent

Новичок
Только что проверил с твоим дампом, цикл на 1000 раз выдает всегда только одну строчку из базы.
for ($i=1; $i<=1000; $i++) {
$query=mysql_query("select * from portfolio order by rand() limit 2, 1");
$z=mysql_num_rows($query);
if($z>0):
while($banner=mysql_fetch_assoc($query)){
print("$z-$banner[name]<br>");}
endif;
}

$z всегда равно 1.
 

alex234

Guest
XStudent, ты меня не правильно понял. да, он выдает одну строчку. А Имеется ввиду, скока разных.

вот у меня давал только 2.

-~{}~ 26.04.05 18:35:

Автор оригинала: Tor
бред
по-моему тоже, но он, как ни странно, работает=)
 

Tor

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

может лучше переставить софт, поменять память или в чем там у тебя проблема
 

XStudent

Новичок
Ясно. md5 тебе не поможет, на том же цикле на 1000 до 5 подряд повторяются результаты. Может, 3 строки маловато, будет больше, будет и выборка разнообразнее.
 
Сверху