插入随机数和选定的行(php,mysql)

时间:2015-12-07 23:09:54

标签: php mysql mysqli

正如标题所述,我想知道如何插入用php生成的随机数和从另一个表中选择的行。例如:

<?php
$randomid = (rand(1,1000000));

$sql = "INSERT INTO example2 (randomid, userid, name)
        VALUES ('$randomid')
        SELECT userid, name
        FROM example1
        WHERE name='Donald' "

$mysqli->query($sql);

?>

我不确定该怎么做。我必须将其分为插入和更新查询吗?

1 个答案:

答案 0 :(得分:0)

MySQL中的

SELECT可用于输出消息/静态值,如this example

SELECT CASE 
    WHEN userid<100 THEN 'less than 100'
    WHEN userid<200 THEN 'less than 200'
    ELSE 'greater than 200' 
END AS message, userid
FROM mytable

所以在你的例子中你可以做同样的事情

$randomid = (rand(1,1000000)); // <--- imagine 25 was returned

$sql = "INSERT INTO example2 (randomid, userid, name)
        SELECT ".$randomid.", userid, name
        FROM example1
        WHERE name='Donald' " // <--- you select now looks like 'SELECT 25, userid, name'

然而有一个缺点,因为这会给每个条目name唐纳德相同的值,所以如果你有多个唐纳德,它有点打败了随机值的目的,除非你打算限制插入一个在给你的PHP rand函数重新计算

的时候

更好的方法是使用MySQL自己的RAND function

  

返回0&lt; = v&lt;范围内的随机浮点值v。 1.0。

因为这个函数返回一个十进制/浮点值,这对于一个整数键来说并不是很理想,我们希望通过多次使用它来使它成为一个inetger并使用FLOOR来使用这个

FLOOR(RAND()*1000000) AS randomid

Fiddle

这将得到0到1之间的值,我们将它乘以1000000,然后使用FLOOR将其向下舍入到最接近的完整数字,与PHP代码不同,为每个条目创建一个新数字。所以15个唐纳德将有15个不同的随机ID。你仍然有可能获得相同的数字,但这是随机数的性质