Php 比较两个表的值并导出JSON结果
我有两张不同的桌子。对于那些我选择一些结果的人。 第一种基于最小/最大值,第二种基于Lat/Lng。这很简单(不要太注意这些值),是由以下因素造成的:Php 比较两个表的值并导出JSON结果,php,mysql,compare,json,nested-loops,Php,Mysql,Compare,Json,Nested Loops,我有两张不同的桌子。对于那些我选择一些结果的人。 第一种基于最小/最大值,第二种基于Lat/Lng。这很简单(不要太注意这些值),是由以下因素造成的: $sql1="SELECT * FROM events WHERE value BETWEEN '".$min2d."' AND '".$max2d."'"; $sql2="SELECT * FROM locations WHERE (lng BETWEEN ".$wl." AND ".$el.") AND (lat BETWEEN '".$sl
$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数组中并将其位置作为“holder”来对事件进行排序。这意味着,每个位置可能有几个事件
某些位置可能没有事件,但某些事件可能与位置不对应。我们唯一的比较方法是使用相同的'id'
在我下面的尝试中,buggy当然会为所有(这是错误的)位置创建结果,即使对于那些没有事件的位置也是如此。这就是我需要你宝贵帮助的地方
$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 .= ']}';
要比较两个表的值并将结果打印为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);
?>
要比较两个表的值并将结果打印为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);
?>
您不使用联接而不是自己在两个查询之间进行匹配,这有什么原因吗?为什么您要手动创建JSON而不是使用JSON_encode()
?您的内部while循环将只在外部循环的第一次迭代中工作,因为它将获取$sql1
的所有结果,并且下一次没有任何东西可以获取。您需要执行mysql\u data\u seek($result1,0)代码>在内部循环之前将其重置回起始位置。是否有原因不使用联接而不是在两个查询之间进行自己的匹配?为什么您要手动创建JSON而不是使用JSON_encode()
?您的内部while循环将只在外部循环的第一次迭代中工作,因为它将获取$sql1
的所有结果,并且下一次没有任何东西可以获取。您需要执行mysql\u data\u seek($result1,0)代码>在内部循环之前将其重置回开始位置。