我一直在寻找一种方法来获取带有where子句的随机行。我在stackoverflow上看过很多帖子,它们都有一些缺点,或者太复杂和丑陋。
但是我发现了这个查询,它看起来非常简单和聪明
你能看到它缩放的任何重大缺陷吗?
INSERT INTO table (column1, column2, rand_col) VALUES(1,2,RAND());
然后选择随机行变得非常简单:
SELECT * FROM table WHERE rand_col>RAND() LIMIT 1
此算法允许删除记录,而无需重新计算键列的额外步骤。
关于格式化的猜测。我正在使用手机
答案 0 :(得分:1)
我看到以下缺点:
答案 1 :(得分:0)
缺点是列出的几个,一个很好的解决方案是:
找到表格中的行数,在那里选择一个随机数并选择该行。
$row = SELECT table_rows*rand() FROM INFORMATION_SCHEMA.TABLES WHERE table_name='foo'
SELECT * FROM foo LIMIT $row,1
答案 2 :(得分:0)
您不需要额外的列。维护它只是浪费空间和代码。只需使用
SELECT * FROM table ORDER BY rand() LIMIT 1