2015-03-31 50 views
0

是的。我怎样才能插入一个随机点与X | Y还没有在我的Mysql数据库中

我有坐标的一些基地。他们都在中心附近。现在我想添加一个基地,以独特的坐标,靠近其他基地。我曾经想过,到目前为止:

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是自动增量,这就是为什么我插入NULL

这至今是我怎么能选择我希望他们有在区域中的点。我已经想到用坐标制作一个唯一的索引。但是我怎么能确定,新的基点是在新的点上创建的?

我不希望在php中使用while循环,我认为这不会是一个很好的溶剂。

编辑:

甚至没有工作,我不能让在INSERT语句子查询..

回答

0

只是告诉:

我解决它在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(); 

} 
1

也许使用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; 
相关问题