mysql随机使用最少

时间:2011-02-12 05:37:40

标签: mysql

除非选择了所有记录,否则我需要随机选择一条记录,而不是之前已选择的记录。

表格设置: _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

3 个答案:

答案 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