Pls what query do I need to randomly select JUST ONE ROW in my table?
I have tried:
SELECT *
FROM `table`
ORDER BY RAND()
LIMIT 0,1;
and it seems very slow and sometimes doesnt work.
Thanks
Pls what query do I need to randomly select JUST ONE ROW in my table?
I have tried:
SELECT *
FROM `table`
ORDER BY RAND()
LIMIT 0,1;
and it seems very slow and sometimes doesnt work.
Thanks
If the table is large, ORDER BY
will be slow. Instead you can just pick a random offset based on the number of rows in the table.
SELECT * FROM table LIMIT 1 OFFSET ?
Where ?
is some random number < SELECT COUNT(*) FROM table
You can create a STORED PROCEDURE
which contains a Dynamic SQL to get random record,
DELIMITER $$
CREATE PROCEDURE SelectOne()
BEGIN
SET @rownum := (SELECT count(*) FROM TableName);
SET @start := (SELECT FLOOR((rand() * @rownum)));
SET @sql = CONCAT('SELECT * FROM TableName LIMIT ?, 1');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @start;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
thanks to Jack for improvement :)