2017-03-07 74 views
0

我一直有我的MySQL查詢問題。我目前正在嘗試製作一個程序,用一個魔術技巧爲特定預訂隨機填充橋接表。主鍵搜索上的多個結果

經過數小時的鬥爭程序後,我已經將問題縮小到這行代碼。

SELECT * 
FROM avaliable_tricks WHERE table_id = FLOOR(RAND() * 144)+1; 

我試圖檢索使用一個隨機生成的數字,將等於其主鍵的技巧的信息。它應該只抓住一個條目,因爲它使用主鍵,主鍵是唯一值。實際上,它抓取0,1,2或更多條目,沒有韻律或理由。 IE瀏覽器。它只是返回了4行,主鍵爲2,5,47和107.

我想不出任何原因,它不工作,除了它的一個隨機生成的數字。

在我的代碼中是否存在固有的錯誤?

編輯: 這是在我的臨時表上運行的DESCRIBE。

table_id int(11) NO PRI  auto_increment 
show_trick_id int(11) YES   
trick_length int(11) YES   
recommended_age int(11) YES   
+0

您可能會得到更好的答案,如果你包括「描述」你的表如下所示:https://dev.mysql.com/doc/refman /5.7/en/explain.html –

+0

你確定'table_id'是'available_tricks'的pk嗎? pk應該是call'id'或'available_tricks_id' –

+0

它是我正在測試的臨時表。它絕對是主要關鍵,因爲我在最後一小時內製作了桌子。 –

回答

0

RAND()對錶中的每一行執行一次,並生成不同的值。如果你只想得到一個隨機數,你可以使用子查詢(派生表);

SELECT * 
FROM avaliable_tricks 
CROSS JOIN (SELECT FLOOR(RAND() * 144)+1 as rnd) r 
WHERE table_id = r.rnd; 

或者只是使用一個變量

SET @rnd = SELECT FLOOR(RAND() * 144)+1; 
SELECT * 
FROM avaliable_tricks 
WHERE table_id = @rnd;