我的 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
最佳答案
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;
关于mysql - 主键搜索有多个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42658753/