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,请使用其窗口功能之一。
我需要从每个类别中获取 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,请使用其窗口功能之一。