我正在尝试从MySQL中的表中获取随机行。我正在使用以下查询:
SELECT *
FROM my_table
WHERE id IN (
SELECT ROUND((RAND() * (MAX(id)-MIN(id)))+MIN(id)) AS id
FROM my_table
);
我希望理解为什么当内部查询总是得到1行时,该查询有时会返回多于1行?
由于
答案 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;