2011-12-12 71 views
0

我使用google api从当前位置得到最近的50公里位置名称,所以它工作正常。插入多个数据以及使用php更新数据库?

所以我需要将所有这些位置插入我的数据库。如果某个位置已经存在于数据库中,则需要更新这些位置。

例如,我在google api中获得10个位置,因此我的数据库中已有5个位置。我需要5个位置更新,其余5个位置都是插入。

这里是我的代码:

<?php 
require 'dbconnect.php'; 
$LocaName=$_REQUEST['locname']; 
$address=$_REQUEST['address']; 
$latt=$_REQUEST['Latt']; 
$long=$_REQUEST['Long']; 

if($latt && $long) 
{ 
    $LocaNamearray = explode("|||", $LocaName); 
    $addressarray = explode("|||", $address); 
    $lattarray=explode("|||",$latt); 
    $longarray=explode("|||",$long); 

    for($i=0;$i<count($lattarray);$i++) 
    { 
     $query1="select * from tbl_MapDetails where Latitude='".$lattarray[$i]."'and Longitude='".$longarray[$i]."'"; 
     $result1=mysql_query($query1); 
     $now=mysql_num_rows($result1); 
    } 

    if($now >=1) 
    { 
     for($k=0;$k<count($lattarray);$k++) 
     { 
      $query="update tbl_MapDetails set LocationName='".$LocaNamearray[$k]."', Address='".$addressarray[$k]."',Latitude='".$lattarray[$k]."', Longitude='".$longarray[$k]."' where Latitude='".$lattarray[$k]."'and Longitude='".$longarray[$k]."'"; 
     } 
     $nav="update"; 
    } 
    else 
    { 

     $query ="INSERT INTO tbl_MapDetails(LocationName,Address,Latitude,Longitude) VALUES"; 
     $strDelimiter = ""; 

     for($j=0;$j<count($LocaNamearray);$j++) 
     { 
      $name =$LocaNamearray[$j]; 
      $address =$addressarray[$j]; 
      $lat = $lattarray[$j]; 
      $long = $longarray[$j]; 
      $query .= $strDelimiter."('$name', '$address','$lat','$long')"; 
      $strDelimiter = ','; 
     } 
     $nav="Add"; 
    } 

    $result= mysql_query($query); 

    if($result) 
    { 
     echo mysql_error(); 
     $message=array("message"=>"sucessfully".$nav); 
    } 
    else 
    { 
     echo mysql_error(); 
     $message=array("message"=>"fail".$nav); 
    } 
} 
else 
{ 
    $message=array("message"=>"require latt and long"); 
} 

echo json_encode($message); 

?> 

这里插入和更新工作,但我需要在数据库中检查每一个位置。数据库中没有位置。它需要插入其他位置进行更新。如何检查这些条件匹配的位置是否更新以及插入的位置是否不匹配请指导我。

+2

嗨user816891,你的代码很难阅读。你会发现人们更可能帮助你,如果你格式化你的代码。此外,你应该尝试并提供有关你的问题的更多细节。什么是/没有发生?你有错误吗?如果是这样,那么错误信息是什么。 – liquorvicar

+0

谢谢你的回应..在这段代码中,我没有收到任何错误,我们可以解释一下例子,我得到了10个位置,所以首先我必须检查位置是否已经存在或没有,如果已经有更新这些位置基于地位和logituide没有位置将这些位置添加到数据库中,所以我的问题是一些位置已经在数据库中有一些位置不存在,所以我需要执行更新和插入也,所以我想知道如何检查这些条件... PLZ指导我 – Ajay

回答

1

你的逻辑在代码中是错误的。你正在做的是循环提供的数据和每组数据检查是否存在具有该经纬度的位置并将其存储在$ now变量中。一旦你完成了这个循环,你就可以立即检查$并再次遍历所提供的数据,并对每组数据进行INSERT或UPDATE。因此,如果最后一组数据存在,您的脚本将尝试更新每组数据。如果没有,您的脚本将尝试插入每组数据。你的代码应该是这样的(你的代码和伪代码的混合物):

for($i=0;$i<count($lattarray);$i++) 
{ 
    $query1="select * from tbl_MapDetails where Latitude='".$lattarray[$i]."'and Longitude='".$longarray[$i]."'"; 
    $result1=mysql_query($query1); 
    $now=mysql_num_rows($result1); 


    if($now >=1) 
    { 
     // update table with location details 
    } 
    else 
    { 
     // insert location details into table 
    } 
} 

如果这成为一个性能问题,你可以先看检索所有SELECT数据,但如果你只处理10一次行,你应该没问题。

注意:根据$ _REQUEST数据来自哪里,您可能需要进行一些验证,即检查是否有匹配的纬度/长/名称/地址详细信息。

1

看看MySQL的ON DUPLICATE KEY UPDATE。但是你一定要小心,因为这是非常慢的操作。 但是,我认为,如果你只是使用OR条件将所有的SELECT请求合并为一个,那将会更好。