我需要随机选择一条记录,但不能选择之前已选择的记录,除非已选择所有记录。
表格设置: _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/