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;
有沒有你不使用的理由一個JOIN而不是在兩個查詢之間進行自己的匹配?你爲什麼手工創建JSON而不是使用'json_encode()'? – Barmar
你內在的while循環只能在外循環的第一次迭代中工作,因爲它獲取'$ sql1'的所有結果,並且下次沒有任何結果可以獲取。您需要在內部循環之前執行'mysql_data_seek($ result1,0);'將其重置回到開始處。 – Barmar