Выбор случайной строки из БД

step

Новичок
Выбор случайной строки из БД

Есть запрос:
SELECT id, img_path, url
FROM banners
WHERE b_place = 1 AND active = 1;
выбирающий из таблицы все баннеры для места b_place=1, с активностью=1..

Как сделать выборку всего одной строки случайным образом? (ротация баннеров для одного рекламного места)
 

step

Новичок
SELECT id, img_path, url
FROM banners
WHERE b_place = 1 AND active = 1
ORDER BY RAND()
LIMIT 1;
почему-то выдаёт каждый раз одну и ту же строку :(
 

step

Новичок
задача такова, что на определённом рекламном месте не больше четырёх баннеров.. (поэтому я их и выбираю b_place = 1)
 

voituk

прозревший
fixxxer
Я думаю ему лучше представить как пользоваться поиском!
 

Viktor_Rez

Новичок
PHP:
$res = mysql_query("SELECT id, img_path, url FROM banners WHERE b_place = 1 AND active = 1 LIMIT 4");

$row = rand(0,3);

echo mysql_result($res,$row,"url");
 

step

Новичок
вижу.
но по условиям задачи как раз лимит уже и не нужен, иначе пятый баннер никогда не будет показан..
пусть выбираются все баннеры для данного рекламного места b_place=1, а ниже пусть будет ранд.
только ранд тогда надо делать не до 3, а до mysql_num_rows
так?
 

Dreammaker

***=Ф=***
Полупсевдокод :) :

PHP:
SELECT COUNT(*) as banner_count  FROM banners WHERE b_place = 1 AND active = 1

....

$count = $row['banner_count']; 

$offset = rand(0, $count-1);

SELECT id, img_path, url  FROM banners WHERE b_place = 1 AND active = 1 LIMIT $offset, 1
Недавно задавался решением избавиться от глючно-тяжёлого ORDER BY RAND() . Это решение наиболее красивое, из тех, что придумал / нашёл... Идею для этого нашёл на каком-то форуме.

update: конечно, лучше бы без этого - WHERE b_place = 1 AND active = 1 в первом запросе, но что поделаешь... :)
 

Viktor_Rez

Новичок
Автор оригинала: step
вижу.
но по условиям задачи как раз лимит уже и не нужен, иначе пятый баннер никогда не будет показан..
пусть выбираются все баннеры для данного рекламного места b_place=1, а ниже пусть будет ранд.
только ранд тогда надо делать не до 3, а до mysql_num_rows
так?
Правильно думаешь. :) Только одна поправка: mysql_num_rows() - 1
 

step

Новичок
to Viktor_Rez
согласен :)


но лучше, кажется, попробовать как советует Dreammaker
 
Сверху