是的。
我有一些坐标基础。他们都在中心附近。现在我想在唯一坐标处,在其他基点附近再添加一个基点。到目前为止,我已经考虑过了:
INSERT INTO `mydb`.`base`
(`idbase`, `coordinate_X`, `coordinate_Y`)
VALUES (NULL,
'(FLOOR( 1 + RAND( ) *((select max(coordinate_X))+1)))',
'(FLOOR( 1 + RAND( ) *((select max(coordinate_Y))+1)))'
);
idbase是自动递增的,这就是我插入空的原因
到目前为止,这就是我如何在我希望他们拥有的区域中选择一个点。我已经准备好用坐标做一个唯一的索引了。但我怎么能确定,一个新的基地是在一个新点上创建的呢?
我宁愿不在php中使用while循环,我认为这不是一个好的解决方案。
编辑:
这甚至都不起作用,我不能在insert语句中进行subselect。。
也许使用INSERT..SELECT
构造,而不是在侧引号中使用格式错误的子查询:
INSERT INTO `mydb`.`base`
(`idbase`, `coordinate_X`, `coordinate_Y`)
SELECT NULL,
FLOOR( 1 + RAND( ) * (max(coordinate_X)+1) ),
FLOOR( 1 + RAND( ) * (max(coordinate_Y)+1) )
FROM mydb.base;
只是告诉:
我用PHP解决了这个问题:
function newbase($user)//create a new base for given user
{
$mycon = createconnection();
$sql = "SELECT max(abs(coordinate_X)+1) as X,max(abs(coordinate_Y)+1) as Y FROM `base`";
$range = $mycon->query($sql)->fetch_assoc();
do
{
$coordinateX = rand(-$range['X'], $range['X']);
$coordinateY = rand(-$range['Y'], $range['Y']);//get random coordinates
$sql = "INSERT INTO `inetphan_gibb`.`base` (`idbase`, `coordinate_X`, `coordinate_Y`, `name`, `user_iduser`) VALUES (NULL, '$coordinateX', '$coordinateY', 'Just a unnamed base', '{$user['iduser']}');";
$mycon->query($sql);
} while ($mycon->affected_rows < 1);//repeat until a row is affected
$mycon->close();
}