Сравните значения двух таблиц и экспортируйте результаты в 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;

person Diolor    schedule 30.10.2012    source источник
comment
Есть ли причина, по которой вы не используете JOIN вместо того, чтобы выполнять собственное сопоставление между двумя запросами? И почему вы создаете JSON вручную, а не используете json_encode()?   -  person Barmar    schedule 30.10.2012
comment
Ваш внутренний цикл while будет работать только на первой итерации внешнего цикла, потому что он извлекает все результаты $sql1, и в следующий раз нечего извлекать. Вам нужно сделать mysql_data_seek($result1, 0); перед внутренним циклом, чтобы сбросить его обратно в начало.   -  person Barmar    schedule 30.10.2012


Ответы (1)


Чтобы сравнить значения двух таблиц и распечатать результаты в формате 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);
?>
person Crazy4Php    schedule 30.10.2012