我可以在LIMIT
偏移量中使用MySQL函数吗?
像:
SELECT * FROM sites WHERE ... LIMIT FLOOR(1 + RAND() * (SELECT COUNT(*) FROM sites)) , 1
答案 0 :(得分:1)
不,你不能直接直接。 LIMIT
和OFFSET
值必须是常量。
来自the MySQL docs的引文:
LIMIT子句可用于约束SELECT语句返回的行数。 LIMIT需要一个或两个数字参数,它们都必须是非负的整数常量(使用预准备语句时除外)。
您可以使用预准备语句和变量:
SELECT @offset:=FLOOR(1 + RAND() * COUNT(*)) FROM sites;
PREPARE STMT FROM 'SELECT * FROM sites WHERE ... LIMIT ?, 1';
EXECUTE STMT USING @offset;