2017-06-06 116 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 - 作品一種享受,並驚訝地看到它被投票。 –

相關問題