2016-12-24 9 views
1

1回の呼び出しで複数のmysql値を取得する方法を理解したいと思います。つまり、現在のクエリがあります。これは動作します。 1回の呼び出しで複数のmysqlクエリを実行する

SELECT COUNT(*) AS cnt, 
     (3595 * 
      acos(
       cos(radians({$lat1})) 
       * cos(radians(lattitude)) 
       * cos(radians(longitude) - radians({$lon1})) 
       + sin(radians({$lat1})) 
       * sin(radians(lattitude)) 
      ) 
     ) AS distance 
     FROM members WHERE person = 'single' 
     HAVING distance < 50 
    ); 

この

は後にそうように私のPHPによって呼び出されます。

$single = $row['cnt']; 

echo json_encode(array(
    'single' => $single 
)); 

私の架空のテーブルがsinglemarried、およびdivorcedをしている人たちで構成されています。この例では、私はsingleの人のためだけにクエリを実行しました。同じmySQlクエリを使用してこれらのグループすべてに対して同じ要求を実行するようにクエリを変更する方法を知りたいと思います。特にjson encode機能を使用する。

私は、複数の別々のSELECTステートメントと、複数のインスタンス$row['cnt']とを組み合わせた例を見てきました。

答えて

2

をグループを使用することができます。実際には、singlemarrieddivorced以外のカテゴリがない場合は、WHERE句は必要ありません。

$conn = new mysqli($host, $user, $pass, $db); 

$result = $conn->query(" 
    SELECT 
     COUNT(*) AS cnt, 
     (3595 * 
      acos(
       cos(radians({$lat1})) 
       * cos(radians(lattitude)) 
       * cos(radians(longitude) - radians({$lon1})) 
       + sin(radians({$lat1})) 
       * sin(radians(lattitude)) 
      ) 
     ) AS distance, 
     person -- <-- this gives you the category in the result 
    FROM 
     members 
    WHERE 
     person in ('single', 'divorced', 'married') 
    GROUP BY 
     person 
    HAVING 
     distance < 50 
"); 

$rows = $result->fetch_all(MYSQLI_ASSOC); 

echo json_encode($rows); 

mysqli_result :: fetch_allはあなたが必要なものを得るためにあなたを助けることができます。 http://php.net/manual/en/mysqli-result.fetch-all.php;)

を更新:

私はJSでやるだろう何がこれに似たものである:

data.forEach(function(item) 
{ 
    switch (item.person) 
    { 
     case 'single': 
      $("#count_single").html(item.cnt) 
      break 

     case 'married': 
      $("#count_married").html(item.cnt) 
      break 

     case 'divorced': 
      $("#count_divorced").html(item.cnt) 
      break 
    } 
}) 
+0

これは本当にクールな '[{" cnt ":" 1 "、" person ":" single "}]'のようなJSON結果を与えますが、私の情報を分離する方法はまだ分かりませんAJAXは '$( '#div')のような処理をします.html(data.marriednumbercount)' –

+0

Oooooh。わかった。 '$("#count_married ").html(data [0] .cnt);などのようになります。どうも! –

+0

MySQLやPHPレベルで結果を少しでも変換して、JSONで必要に応じて構造体を取得することができます。しかし、私はその答えを更新して、MySQLの結果をどのように行うのかについてjsスニペットを追加しました。 – tiomno

1

あなたは、私のバージョン各人値のためにあなたが行を取得このように

SELECT person, COUNT(*) AS cnt, 
     (3595 * 
      acos(
       cos(radians({$lat1})) 
       * cos(radians(lattitude)) 
       * cos(radians(longitude) - radians({$lon1})) 
       + sin(radians({$lat1})) 
       * sin(radians(lattitude)) 
      ) 
     ) AS distance 
     FROM members 
     GROUP By person 
     HAVING distance < 50 
    ); 

により、@ scaisEdgeのに非常によく似

+0

それでは、どのように私はそれぞれから '$行[ 'CNT']'問い合わせるかもしれません個人(独身、既婚、離婚)? –

関連する問題