Сведения о вопросе

Holish

00:24, 2nd October, 2020

Теги

MySQL    

Случайная строка из таблицы

Просмотров: 371   Ответов: 6

Как вывести случайную строку из таблицы базы данных MySQL.



  Сведения об ответе

Chhiki

22:05, 29th September, 2020

Если табличка не очень большая,
Select * From TABLE Order By rand() Limit 1;


  Сведения об ответе

+-*/

06:31, 29th September, 2020

очень советую погуглить по данной теме. но в честь праздника дам готовый ответ, но обещайте погуглить, очень полезна информация
SELECT pk, data
FROM test AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(pk)
FROM test)) AS id)
AS r2
WHERE r1.pk >= r2.id
ORDER BY r1.pk ASC
LIMIT 1;

тестировал на миллионе реальных записей, шустренько.


  Сведения об ответе

prince

07:33, 25th September, 2020

Самый быстрый способ генерировать ключи по которым делать выборку на php или другом языке и выбирать в базе через WHERE, это самый быстрый способ. Но в таблице не должно быть дыр, поэтому формируйте временную таблицу без дыр и уже выбирайте из неё, ну и пересоздавайте её через какое-то время по крону. Вот выборка 7-ми записей:


<?php

$max_sort_n = $db->query("SELECT MAX(sort_n) FROM users", array(), "el");



$sort_n = rand(7, $max_sort_n);



if($max_sort_n)

{

  $res = $db->query("SELECT id, login FROM users WHERE sort_n BETWEEN ?i AND ?i", array($sort_n - 6, $sort_n), "assoc");

}

?>


  Сведения об ответе

repe

09:39, 25th September, 2020

Я делал так:
1. Вычисляешь общее количество строк в таблице с пом. COUNT(*). Суем цифру в $count.
2. На php генеришь случайное число, от 1 до $count. Суем в $rnd.
3. Делаешь выборку SELECT, а в лимите указываешь LIMIT $rnd, 1.


  Сведения об ответе

SKY

13:10, 26th September, 2020

Интересно, почему вариант с подселектом COUNT и OFFSET+LIMIT 1 никому в голову не пришёл. Не забудьте из COUNT вычесть единичку перед умножением на rand().


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться