2016-07-27 9 views
1

私は2つのquiresを1つに結合しようとしています。その最初のquireは、3KMの場所の周りにいるユーザーを取得することであり、2番目のクエリは、彼らが働く場所を並べ替えることです。 私は約3KMの特定の会社で働く人々を得ることができるように両方のquiresに参加したいです。 そして、仕事はさまざまな会社名を持つコラムです。2つのクエリtogatherをどのように組み合わせるか?

http://victorybro.esy.es/LocateMe/locateNearme.php?work[]=HCL&work[]=DELL

このリンクは与える: "クエリに失敗しました!"ここで

は私のPHPのコードです:

<?php 

      $con = mysqli_connect("mysql.hostinger.in", "u408122646_chat", "123", "u408122646_chat"); 

    $work = $_GET['work']; 
    $locate_me = array(); 

    foreach ($_REQUEST['work'] as $key => $val) { 
    $locate_me[$key] = filter_var($val, FILTER_SANITIZE_STRING); 
    } 
    $works = "'" . implode("','", $locate_me) . "'"; 

$sql="SELECT id,latitude,londitude, (6371 * acos(cos(radians(12.95665699)) * cos(radians(latitude)) * cos(radians(londitude) - radians(80.23708535)) + sin(radians(12.95665699)) * sin(radians(latitude)))) AS distance FROM locate_me HAVING distance < 1 ORDER BY distance LIMIT 0 , 20 
    UNION 
    SELECT * FROM locate_me WHERE work IN ({$works})"; 


    $res=mysqli_query($con,$sql); 

if(!$res) 
{ 
     die("Query Failed!"); 
} $response["success"] = true; 
    $response= array(); 
while($row = $res->fetch_array(MYSQL_ASSOC)) { 

     $response[] = $row;} 


echo json_encode(array("response"=>$response)); 
mysqli_free_result($res); 

?> 
+0

'union'を使用しているときは、別々のクエリが同じ数の列を生成することを確認してください。 – 1000111

+0

は 'mysqli_error($ con)'を使ってエラーメッセージを取得します。すべてのselect文は同じ数の列を返さなければなりません – Jens

+0

(1) 'select'の間で' union 'を実行するとき、selectはunion互換でなければなりません(同じ数の列を持ちます)(2) 'having'グループ化する。 (3)論理を再訪する必要があるのは、1回の選択で必要なことを実行できる可能性があるからです。 – apokryfos

答えて

0

私はあなたが必要なものを理解していれば、SQLのように書くことができます:MySQLの中であなたが得ることができる5.7.6+こと

$myLocLat = 12.95665699; 
$myLocLon = 80.23708535; 

$sql = <<<SQL 
SELECT 
    id, 
    latitude, 
    londitude, 
    (6371 * acos(cos(radians($myLocLat)) * cos(radians(latitude)) * cos(radians(londitude) - radians($myLocLon)) + sin(radians($myLocLat)) * sin(radians(latitude)))) AS distance 
FROM locate_me 
WHERE distance < 1 
     AND work IN ($works) 
ORDER BY distance LIMIT 0 , 20 
SQL; 

注意2点間の距離:

ST_Distance(Point(lon1,lat1),Point(lon2,lat2)) 

距離を決定する式を扱いたくない場合は何かを調べてくださいs。

+0

$ sqlからデータを印刷する方法。ありがとうございます –

+0

あなたの現在のコードはすでにそれをしていませんか?現在の '$ sql = ... 'をここのコードブロックに置き換えるだけでよいのです。 – apokryfos

関連する問題