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

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

Line 1: Incorrect syntax near 'limit'.

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

Увы,

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

заполняет rn одинаковыми записями.
...
Рейтинг: 0 / 0
Выборка случайной строки
    #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
Выборка случайной строки
    #32253729
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помню на форуме пхпклуба что-то писали про проблемы с order by rand() при больших объемах.

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

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

лучше уж так:


SELECT count (ID) FROM tab;

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

SELECT * FROM tab LIMIT $number ,1
...
Рейтинг: 0 / 0
Выборка случайной строки
    #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
Выборка случайной строки
    #32253981
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я имел ввиду - если есть большая дырка, например, то очень часто будет выскакивать запись с айдишником, который сразу после дырки. это, наверно, не та случайность.
...
Рейтинг: 0 / 0
Выборка случайной строки
    #32310442
Burz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам это недавно искал а всего-то:

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


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