除非选择了所有记录,否则我需要随机选择一条记录,而不是之前已选择的记录。
表格设置: _word(id,nam) _word_tm(id,word_id,tm)
每次使用一个单词时,都会加载到_word_tm中。我想要做的是确保在重复使用已经使用的单词之前使用所有单词。
我真正想要的是下面的内容,但只是想弄清楚如何进行网格划分。
选择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
答案 0 :(得分: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;
答案 1 :(得分:0)
你应该可以这样做:
SELECT * FROM word_table WHERE word NOT IN (SELECT word FROM words_used) ORDER BY rand() LIMIT 1;
您需要拥有MySQL的更新副本才能实现此目的。此外,您需要在事后或之前包含一行代码,以便在words_used
表格与word_table
具有相同内容后清除/重置该表格。
答案 2 :(得分:0)
您可以尝试以下SQL来返回随机行
select A.nam
from _word A
where A.id not in (select B.id from _word_tm B)
order by rand()
limit 1
如果以上内容未返回任何reocrd,请执行简单的
select A.nam
from _word A
order by rand()
limit 1