【问题标题】:Insert random number AND selected rows (php, mysql)插入随机数和选定的行(php、mysql)
【发布时间】:2015-12-07 23:09:54
【问题描述】:

正如标题所述,我想知道如何插入由 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);

?>

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

【问题讨论】:

  • SELECT 可用于在 MySQL 中输出消息/静态值,因此您应该能够做到 "SELECT ".$randomid.", userid, name"。但是因为 MySQL 有它自己的随机函数 RAND() 但它只返回一个介于 0 和 1 之间的十进制数,所以你需要将它乘以 1000000 和 FLOOR 它得到一个随机整数
  • 知道了,谢谢。把它作为答案,我会给你一个最佳答案标记!

标签: php mysql mysqli


【解决方案1】:

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 Donald 的条目提供相同的值,所以如果你有多个 Donald,它有点违背了随机值的目的,除非你打算限制插入在是时候让你的 PHP rand 函数重新计算了

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

返回 0

因为这个函数返回一个十进制/浮点值,这对于整数键来说并不理想,我们希望通过将其相乘并使用 FLOOR 将其变为 inetger

FLOOR(RAND()*1000000) AS randomid

Fiddle

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

【讨论】:

  • 精心制作!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
相关资源
最近更新 更多