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

  • Автор темы Автор темы alex234
  • Дата начала Дата начала

alex234

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

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

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


Что происходит?
 
в БД вроде нет понятия первая строка, вторая строка.. или я ошибаюсь?
 
Автор оригинала: Лексеич
в БД вроде нет понятия первая строка, вторая строка.. или я ошибаюсь?
Имеется ввиду, что она всегда не отдает какую-нибудь одну строчку. Тестил долго и упорно.
 
<?
$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
 
Что-то мне не понятно в запросе - получается "выбрать * из portfolio сортируя случайно вернуть две строки начиная со второй". Что именно тебе не нравится?
 
вернуть одну со второй.
Экспериментирую с лимитами. А суть одна: делаем ~100 запросов и ни в одном случае она не отдает одну строчку.
 
Чем сие обусловлено не ясно, но нашел работающее решение:
ORDER BY MD5(RAND());

что скажете?

-~{}~ 26.04.05 18:24:

Автор оригинала: vafel
токо что тестил без лимита все нормалтно ...
ну возврощает она все, тока если без лимита, то смотри тока первую. все туда сортируются периодически? или тока две на первой позиции в массиве?
 
Только что проверил с твоим дампом, цикл на 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.
 
XStudent, ты меня не правильно понял. да, он выдает одну строчку. А Имеется ввиду, скока разных.

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

-~{}~ 26.04.05 18:35:

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

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