我需要从每个类别中获取4个随机值。什么应该是maria db的正确sql语法。我附上了一张桌子结构图片。
Please click here to check the structure
我应该编写一些程序,还是可以使用基本的sql语法?
答案 0 :(得分:0)
如果您只有几行,则可以使用SQL语句执行此操作:
SELECT id, question, ... FROM x1 ORDER BY rand() LIMIT 1
如果只有几行,这样可以正常工作 - 只要有数千行,排序行的开销就变得很重要,你必须对所有行进行排序才能获得一行。
更棘手但更好的解决方案是:
SELECT id, question from x1 JOIN (SELECT CEIL(RAND() * (SELECT(MAX(id)) FROM x1)) AS id) as id using(id);
在SELECTS上运行EXPLAIN会显示差异......
如果您需要不同类别的随机值,请通过union组合选择并添加where子句
答案 1 :(得分:0)
http://mysql.rjweb.org/doc.php/groupwise_max#top_n_in_each_group
但是ORDER BY category, RAND()
。 (您的category
是博客province
。)
注意它是如何使用@variables进行计数的。
如果你有MariaDB 10.2,那么使用它的一个窗口函数。
答案 2 :(得分:-1)
SELECT column FROM table WHERE category_id = XXX
ORDER BY RAND()
LIMIT 4
为所有类别执行