SQL 用于获取 mariadb 中的每个类别数据

SQL for getting each category data in maria db

我需要从每个类别中获取 4 个随机值。 maria db 的正确 sql 语法应该是什么。我附上了一张 table 结构的图片。

Please click here to check the structure

我应该写一些程序还是可以用基本的 sql 语法来完成?

SELECT column FROM table WHERE category_id = XXX 
ORDER BY RAND() 
LIMIT 4

对所有类别都这样做

如果只有几行,您可以使用 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 子句

http://mysql.rjweb.org/doc.php/groupwise_max#top_n_in_each_group

但是 ORDER BY category, RAND()。 (您的 category 是博客的 province。)

注意它是如何使用@variables 进行计数的。

如果您有 MariaDB 10.2,请使用其窗口功能之一。