2012-10-30 51 views
0

我有兩個不同的表。對於那些我選擇一些結果。 第一個基於最小/最大值,第二個基於Lat/Lng。這很簡單(不支付對價值的關注),並創建:比較兩個表的值和結果導出JSON

$sql1="SELECT * FROM events WHERE value BETWEEN '".$min2d."' AND '".$max2d."'"; 
$sql2="SELECT * FROM locations WHERE (lng BETWEEN ".$wl." AND ".$el.") AND (lat BETWEEN '".$sl."'AND'".$nl."')"; 

現在,我們已經縮小的結果,我們要比賽'id'行的第一個表,如果存在在第二張桌子上。成功後,我們創造了成果。

因此,讓我們的一些數字第一:

$result1 = mysql_query($sql1); 
$result2 = mysql_query($sql2); 

$numRows1 = mysql_num_rows($result1); 
$numRows2 = mysql_num_rows($result2); 

$loopCount1 = 1; 
$loopCount2 = 1; 

對於JSON(從用戶)的更有效的分析,我們希望通過創建它們變成一個JSON陣列的位置作爲對事件進行排序「持有人。這意味着,每個地點可能有幾個事件。

某些地點可能沒有事件,但也有一些事件可能不對應於地點。我們唯一的比較方法是相同的'id'

隨着我的下面的嘗試,這當然是越野車創建的所有(這是錯誤的)位置結果,即使對於那些沒有事件。這就是我需要你寶貴幫助的地方。

$json = '{"markers":['; 
while ($row2 = mysql_fetch_array($result2)){ 
    $json .= '{"coordinates": { "lat":'. $row2['lat'] .', "lng" : ' . $row2['lng'] .'},' 
      .'{"events" : ['; 
    while ($row1 = mysql_fetch_array($result1)){ 
     if ($row1['id']=$row2['id']) 
      $json .= '{ ' 
        .'"title": "'.$row1['title'].'",' 
        .'"info": "'.$row1['info'].'",' 
        .'"}'; 
     // add comma for Json if not final row 
     if ($loopCount1 < $numRows1) { 
      $json .= ', '; 
      $loopCount1++;} 
     } 
    $json .= ']}}'; 
    // add comma for Json if not final row 
    if ($loopCount2 < $numRows2) { 
      $json .= ', '; 
      $loopCount2++;} 
    } 
$json .= ']}'; 

最後的回聲:

echo $json; 
+1

有沒有你不使用的理由一個JOIN而不是在兩個查詢之間進行自己的匹配?你爲什麼手工創建JSON而不是使用'json_encode()'? – Barmar

+0

你內在的while循環只能在外循環的第一次迭代中工作,因爲它獲取'$ sql1'的所有結果,並且下次沒有任何結果可以獲取。您需要在內部循環之前執行'mysql_data_seek($ result1,0);'將其重置回到開始處。 – Barmar

回答

5

要比較兩個表中的值,並打印結果JSON請使用下面的代碼,

<?php 
     /* connect to the db */ 
     $link = mysql_connect('localhost','username','password') or die('Cannot connect to the DB'); 
     mysql_select_db('db_name',$link) or die('Cannot select the DB'); 

     /* grab the posts from the db */ 
     $query1 = "SELECT * FROM test1"; 
     $result1 = mysql_query($query1,$link) or die('Error query: '.$query1); 

     $query2 = "SELECT * FROM test2"; 
     $result2 = mysql_query($query2,$link) or die('Error query: '.$query2); 

     /* create one master array of the records */ 
     $posts = array(); 
     if(mysql_num_rows($result1) && mysql_num_rows($result2)) { 
     while($post1 = mysql_fetch_assoc($result1)) { 
      $post2 = mysql_fetch_assoc($result2); 
      if($post1['name'] == $post2['name']) 
       $posts[] = array('test1'=>$post1,'test2'=>$post2); 
     } 
     } 

    header('Content-type: application/json'); 
    echo json_encode(array('posts'=>$posts)); 

     /* disconnect from the db */ 
     @mysql_close($link); 
?>