mysql 随机最少使用

标签 mysql

我需要随机选择一条记录,但不能选择之前已选择的记录,除非已选择所有记录。

表格设置: _word(id,名称) _word_tm(id,word_id,tm)

每次使用一个单词时,它都会被加载到 _word_tm 中。我想要做的是确保在重复使用已使用过的单词之前使用所有单词。

我真正想要的是像下面这样的东西,但只是想弄清楚如何网格化。

select w.nam FROM _word w LEFT JOIN _word_tm wt ON w.id = wt.word_id ORDER BY count(wt.id) asc, rand() limit 1

最佳答案

首先,找出最少使用的单词被使用了多少次:

select _word.id, count(*) c from _word
left join _word_tm on _word.id=_word_tm.word_id order by c limit 1;

将该值(来自 c)存储在变量 $least_used 中。然后以随机顺序获取所有使用过多次的单词:

select _word.id, count(*) c from _word
left join _word_tm on _word.id=_word_tm.word_id
group by _word.id having c <= {$least_used}
order by rand() limit 1;

关于mysql 随机最少使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976551/

相关文章:

mysql - 我在 Visual Studio 上的选择查询中遇到 MySQL 语法错误

mysql - 如何从mysql查询中的2个结果中减去

用户数据的 PHP、MySQL 和 AES 加密/解密

database - 无法从 mysqldump.exe 解析版本号

PHP PDO 相关 : Update SQL statement not updating the content of the database

mysql - 两个连接的结果集排序

mysql - 如何将第三个表加入到查询中并仅从中获取最新记录(按日期)

java - java中的PreparedStatement.addBatch有什么限制吗?

javascript - 如何将生成的图像保存到 Aviary

mysql - 两个不同表上的 group_concat 在第二个表上给出重复结果