Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка случайной строки / 10 сообщений из 10, страница 1 из 1
30.01.2002, 12:16
    #32021808
MaxSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
Люди!
Знаю что можно выбрать случайную строку используя RAND в конце запроса!

КАК !?!?!?!
...
Рейтинг: 0 / 0
09.02.2002, 12:13
    #32022557
Медведь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
select * from таблица order by rand() limit 0, 1
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
02.09.2003, 12:30
    #32253554
StarGale
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
А у меня так не работает!

Line 1: Incorrect syntax near 'limit'.

Люди знающие, подскажите, а как можно сделать ВСЮ ВЫБОРКУ в случайном порядке?

Увы,

SELECT name1, ROUND(RAND() * 1000, 1) AS rn FROM names ORDER BY rn

заполняет rn одинаковыми записями.
...
Рейтинг: 0 / 0
02.09.2003, 12:48
    #32253588
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
Должно все работать:
Проверь версию.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
CREATE TABLE `animals` (
  `id` mediumint( 9 ) NOT NULL auto_increment,
  `name` char( 30 ) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

insert into animals (name) values ( "Cat" );
insert into animals (name) values ( "Dog" );
insert into animals (name) values ( "Lion" );
insert into animals (name) values ( "Tiger" );
insert into animals (name) values ( "Elephant" );

select * from animals;
+ ----+----------+
 
| id | name     |
+ ----+----------+
 
|   1  | Cat      |
|   2  | Dog      |
|   3  | Lion     |
|   4  | Tiger    |
|   5  | Elephant |
+ ----+----------+
 
 5  rows in set ( 0 . 00  sec)

select * from animals order by rand() limit  1 , 1 ;
+ ----+------+
 
| id | name |
+ ----+------+
 
|   2  | Dog  |
+ ----+------+
 
 1  row in set ( 0 . 01  sec)

select * from animals order by rand() limit  1 , 1 ;
+ ----+-------+
 
| id | name  |
+ ----+-------+
 
|   4  | Tiger |
+ ----+-------+
 
 1  row in set ( 0 . 00  sec)

select * from animals order by rand();
+ ----+----------+
 
| id | name     |
+ ----+----------+
 
|   2  | Dog      |
|   3  | Lion     |
|   1  | Cat      |
|   4  | Tiger    |
|   5  | Elephant |
+ ----+----------+
 
 5  rows in set ( 0 . 01  sec)

select * from animals order by rand();
+ ----+----------+
 
| id | name     |
+ ----+----------+
 
|   5  | Elephant |
|   4  | Tiger    |
|   3  | Lion     |
|   2  | Dog      |
|   1  | Cat      |
+ ----+----------+
 
 5  rows in set ( 0 . 00  sec)

select version();
+ ------------+
 
| version()  |
+ ------------+
 
|  3 . 23 . 52 -nt |
+ ------------+
 
 1  row in set ( 0 . 00  sec)


mahoune
...
Рейтинг: 0 / 0
02.09.2003, 14:36
    #32253729
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
помню на форуме пхпклуба что-то писали про проблемы с order by rand() при больших объемах.

И предлагали там такое решение:
SELECT max(ID) FROM tab;
потом используемым языком программирования генерируем случайное число в пределах $number = (1 ... max(ID));
и следующим запросом выбираем случайную строку:

SELECT * FROM tab WHERE ID > $number LIMIT 0,1
...
Рейтинг: 0 / 0
02.09.2003, 15:47
    #32253832
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
Макс М.
этот пример будет работать тольkо если в первичном ключе нет дырок

лучше уж так:


SELECT count (ID) FROM tab;

потом используемым языком программирования генерируем случайное число в пределах $number = (1 ... count (ID));
и следующим запросом выбираем случайную строку:

SELECT * FROM tab LIMIT $number ,1
...
Рейтинг: 0 / 0
02.09.2003, 17:11
    #32253979
Макс М.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
fedd
> этот пример будет работать тольkо если в первичном ключе нет дырок

Это было бы если бы я в условии написал
SELECT * FROM tab WHERE ID = $number LIMIT 0,1

хотя баг действительно есть - этот пример не будет работать если скрипт сгенерит случайное число равное max(ID) - в это случае условие не выполнится. Правильнее будет
SELECT * FROM tab WHERE ID >= $number LIMIT 0,1
...
Рейтинг: 0 / 0
02.09.2003, 17:13
    #32253981
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
я имел ввиду - если есть большая дырка, например, то очень часто будет выскакивать запись с айдишником, который сразу после дырки. это, наверно, не та случайность.
...
Рейтинг: 0 / 0
30.10.2003, 14:31
    #32310442
Burz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
Сам это недавно искал а всего-то:

Код:
1.
SELECT TOP 1 FROM table ORDER BY newid()
...
Рейтинг: 0 / 0
30.10.2003, 15:57
    #32310615
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка случайной строки
А где ж ты нашел функцию NEWID()?
Я такой в документации MySQL не изыскал!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка случайной строки / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]