我可以在 LIMIT 偏移量中使用 MySQL 函数吗

Dmy*_*nko 5 mysql limit offset mariadb

我可以在LIMIT偏移量中使用 MySQL 函数吗?喜欢:

SELECT * FROM sites WHERE ... LIMIT FLOOR(1 + RAND() * (SELECT COUNT(*) FROM sites)) , 1
Run Code Online (Sandbox Code Playgroud)

Ale*_*rov 3

不,你不能直接这样做。LIMIT并且OFFSET值必须是常量。

来自MySQL 文档的引用:

LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们必须都是非负整数常量(使用准备好的语句时除外)。

不过,您可以使用准备好的语句和变量:

SELECT @offset:=FLOOR(1 + RAND() * COUNT(*)) FROM sites;
PREPARE STMT FROM 'SELECT * FROM sites WHERE ... LIMIT ?, 1';
EXECUTE STMT USING @offset; 
Run Code Online (Sandbox Code Playgroud)