从MySQL表中获取随机行

时间:2015-03-01 11:12:36

标签: mysql random

我正在尝试从MySQL中的表中获取随机行。我正在使用以下查询:

SELECT *
FROM my_table
WHERE id IN (
    SELECT ROUND((RAND() * (MAX(id)-MIN(id)))+MIN(id)) AS id
    FROM my_table
);

我希望理解为什么当内部查询总是得到1行时,该查询有时会返回多于1行?

由于

3 个答案:

答案 0 :(得分:1)

只是给你一个提示,这将总是返回1个随机行,因此重构你的查询。

注意:如果您在DB中有很多行,那么您的查询将非常昂贵。

SELECT * FROM table
WHERE column = 'data'
ORDER BY RAND()
LIMIT 1

答案 1 :(得分:0)

使用此代替

SELECT *
FROM my_table
WHERE id = (
    SELECT ROUND((RAND() * (MAX(id)-MIN(id)))+MIN(id)) AS id
    FROM my_table
);

答案 2 :(得分:0)

我结束了以下存储过程

BEGIN
    SET @indx=0;

    DROP TEMPORARY TABLE IF EXISTS temp;
    CREATE TEMPORARY TABLE temp
        SELECT (@indx := @indx+1) AS indx, mt.id
        FROM my_table mt;

    BEGIN
        DECLARE v_random_index INTEGER;
        DECLARE v_random_id INTEGER;

        SELECT ROUND((RAND() * (MAX(indx)-MIN(indx)))+MIN(indx)) INTO v_random_index
        FROM temp;

        SELECT id INTO v_random_id
        FROM temp
        WHERE indx=v_random_index;

        SELECT *
        FROM my_table mt
        WHERE id=v_random_id;
    END;
END;