Помогите построить sql запрос для выбора случайных значений

Статус
В этой теме нельзя размещать новые ответы.

Inviseble_Demon

Мой дом здесь!
Регистрация
11 Дек 2008
Сообщения
478
Реакции
377
Таблица
1352776571-clip-2kb.png

нужно получить случайный url в котором n_stat <= n
 
Код:
select * from `table` where`table`.n_stat <= `table`.`n` ORDER BY RAND() limit1;


Код:
-- Host:                        127.0.0.1
-- Server version:              5.1.62-log - Gentoo Linux mysql-5.1.62-r1
-- Server OS:                    pc-linux-gnu
-- HeidiSQL version:            7.0.0.4053
-- Date/time:                    2012-11-13 11:21:54
-- --------------------------------------------------------
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET FOREIGN_KEY_CHECKS=0 */;
 
-- Dumping structure for table tmp_db.table
CREATE TABLE IF NOT EXISTS `table` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `url` text,
  `n` int(10) DEFAULT NULL,
  `n_stat` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
-- Data exporting was unselected.
/*!40014 SET FOREIGN_KEY_CHECKS=1 */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 
Inviseble_Demon - сколько планируеться записей в таблице?
2 trooll Не много около 50-100 записей.
Решение найдено спасибо Qwest-fx
2 kiker твоего решения так и не понял... оно как минимум не полное и не чистый sql это )) у меня был подобный сатонизм

PHP:
function GetSites()
{
 
    $q=mysql_query("SELECT * FROM `fr`");
 
    while($row=mysql_fetch_assoc($q))
        $out[]=array($row['url'], $row['n'], $row['n_stat']);
 
    return $out;
}
 
    $sites=GetSites();
 
    for ($i=0, $count=count($sites); $i<$count; $i++)
        if ($sites[$i][2] <= $sites[$i][1])
            $out[]=$sites[$i];
 
Попробуй так:
Код:
SELECT n, n_stat FROM `table` WHERE `n_stat` < `n` OR `n_stat` = `n` ORDER BY rand() LIMIT 1

или так

Код:
SELECT table.n, table.n_stat FROM `table` WHERE table.n_stat < table.n OR table.n_stat = table.n ORDER BY rand() LIMIT 1

(Не начем затестить так что пишу соображения из головы)

Но этот запрос должен работать нормально до 10 000 записей в таблице или 1000 чегото не помню, потом тормаза начнуться, и придеться писать что то типа

Код:
SELECT name FROM table JOIN ( SELECT CEIL(RAND() * ( SELECT MAX(id) FROM table )) AS randomID ) AS random_table ON random_table.randomID=table.ID

в место

Код:
ORDER BY rand() LIMIT 1

UPD: Опередили меня:(
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху