Нужно поправить запрос MySQL

lutskboy
На сайте с 22.11.2013
Offline
171
301

SELECT id from  table
SELECT RAND() as 'R' WHERE 'R' <0.1
ORDER BY 'R' limit 5;

Выдает ошибку

А нужно вытащить 5 случайных id из таблици table

K
На сайте с 08.04.2010
Offline
89
#1

SELECT id FROM table ORDER BY RAND() LIMIT 5

lutskboy
На сайте с 22.11.2013
Offline
171
#2

Kasperaitus, так я знаю. он медленный.

мне нужно типа так

SELECT *

FROM table

WHERE RAND () < 0.1

ORDER BY RAND()

LIMIT 0 , 30

но тут указываеться два раза RAND ()

а мне нужно вложиться в один

siv1987
На сайте с 02.04.2009
Offline
427
#3

Во первых, имена полей обрамляются в обратных кавычках а не прямых. Подзапрос нужно брать в скобки и указать псевдоним. Во вторых, вам нужно сюда каким-то образом прикрепить вторую таблицы. Ну и в третьих https://www.google.ru/search?client=opera&rls=ru&q=order+by+rand+optimization&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

Милованов Ю.С
На сайте с 24.01.2008
Offline
196
#4

Не совсем простой способ с использованием клиентского языка, в моем случае ПХП:

<?php

$min = 0; #значение минимального айдишника

$max = 100500; # значение максимального айдишника

$cntIter = 5; #кол-во АЙдишников

$vals = array();

for($i=1; $i<=$cntIter; $i++)

{

$rand = rand($min, $max);

while(in_array($rand, $vals))

{

#Тупо крутим цикл, чтобы не было совпадений с предыдущими значениями

}

$vals[] = $rand;

}

$in = implode(', ', $vals);

$sql = "SELECT * FROM table WHERE id IN($in)";

print_r($vals); #убрать после проверки работоспособности

?>

ЗЫ. на счет случайной сортировки для Мускула читал на хабре, но к сожалению линка не дам(потерял).

ЗЫЫ. Пример может не сработать, если у Вас в базе не все айдишники с диапазона. То есть ПХП сгенерит 5 чисел, а окажется что некоторых нет. Но в таком случае можно нагенерить 20-30 айдишников и сделать LIMIT 5, но это уже костылёк;)

UPDATE: нашел что-то аналогичное давно прочитанному хабравскому материалу. Вот читайте: http://hudson.su/2010/09/16/mysql-optimizaciya-order-by-rand/

Подпись))
C
На сайте с 04.02.2005
Offline
277
#5

Не совсем понятно, зачем нужна случайная сортировка.

Я конечно могу догадываться, и знаю ряд задач, но чтоб эти задачи применялись на фронтендах - редкость. А если и применяются, то вопрос о производительности не стоит.

Одна из задач - показать случайную статью, случайный товар.

Но если очень хочется, то вот мое:

SELECT * FROM table

START :rand() LIMIT 1

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий