2017-06-06 110 views
3

我有一个有很多单词的表格,也有一个字段,其中包含每个单词的字母数。选择3个随机单词(记录) - 每个字母的一个计数

编辑:下面的示例数据集只是显示表格布局 - 有65,000行的长度的所有组合。

word_id,word,letter_count 
54908,swanage,7 
37338,natured,7 
61637,untwisting,10 

我试图选择三个随机单词确保有一个是4个字母,一个是7个字母,一个是10

我的SQL查询如下。

SELECT * FROM password 
WHERE letter_count = 4 OR letter_count = 7 OR letter_count = 10 
ORDER BY RAND() 
LIMIT 3 

以上将返回3个随机记录,但可能有4,7或10个字母的任意组合。

任何人都可以帮忙吗?

感谢,

约翰

+0

这是不可能的。数据集中没有4个字母的单词(虽然我能想到几个) – Strawberry

+0

@Strawberry lol – Xatenev

+0

对不起,示例数据集只是显示表格布局 - 有65,000行所有的cominations –

回答

2
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(word_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,word VARCHAR(20) NOT NULL UNIQUE 
); 

INSERT INTO my_table VALUES 
(1,'swanage'), 
(2,'natured'), 
(3,'untwisting'), 
(4,'four'), 
(5,'five'), 
(6,'fifteen'), 
(7,'blacksmith'); 


SELECT * 
    FROM 
    (SELECT * FROM my_table WHERE CHAR_LENGTH(word) = 4 ORDER BY RAND() LIMIT 1) x 
UNION 
    (SELECT * FROM my_table WHERE CHAR_LENGTH(word) = 7 ORDER BY RAND() LIMIT 1) 
UNION 
    (SELECT * FROM my_table WHERE CHAR_LENGTH(word) = 10 ORDER BY RAND() LIMIT 1) ; 

+---------+------------+ 
| word_id | word  | 
+---------+------------+ 
|  4 | four  | 
|  1 | swanage | 
|  3 | untwisting | 
+---------+------------+ 
+0

我不知道为什么这已被低估。这是正确的方法,一个随机发现四个字母的单词,一个随机发现七个字母的单词,一个随机发现十个字母的单词。尽管如此,它最好是“联盟所有”;没有重复删除。 –

+0

@ThorstenKettner仇恨者会讨厌;-) – Strawberry

+0

我同意@ThorstenKettner - 作品一种享受,并惊讶地看到它被投票。 –

相关问题