前提・実現したいこと
GPSから取得したデータとDBに格納されているデータを比較して
もっとも近い値のデータを取得したいのですが、すべてのデータが取得されます。
PostgreSQLにお詳しい方、近似値の取得方法をご教示頂けますと幸いで御座います。
宜しくお願い致します。
発生している問題・エラーメッセージ
※36行目は「$this->query=pg_query($this->link,'SET NAMES utf8');」です。
PHP Warning: pg_query(): Query failed: ERROR: syntax error at or near "utf8" LINE 1: SET NAMES utf8 in /Applications/MAMP/htdocs/DatabaseClass.php on line 36
DB情報
title,latitude,longitude タイトルA,111111,222222 タイトルB,333333,444444 タイトルC,555555,666666 タイトルD,777777,888888 ※取得したGPSデータは「11112」「22223」としまして、近似値である「111111」「222222」の「タイトルA」のみが結果で帰ってくるのが理想です。
コード1(get_json.php)
<?php //DatabaseClassを読み込み include_once "DatabaseClass.php"; //テーブル名が選択されているかどうか確認 if($_POST["table_name"] ) { //DB名設定 $db_name = "test"; $database = new Database($db_name); $table_name = $_POST["table_name"]; // 取得したデータが緯度「latitude」が11112、経度「longitude」22223と設定しています。 // 比較後は、近似値の「title」のみを返す $sql = ("SELECT *, sqrt(power(abs(11112 - latitude),2) + power(abs(22223 - longitude),2)) FROM {$table_name} order by title "); //クエリ送信 $query = pg_query($sql); $json= array(); //テーブル名に「m_test」という文字列が入っているテーブルのデータをJSON形式で書き出し if(strstr($table_name, 'm_test')){ while ($row = $database->jsonparse($query)) { $json[] = array( 'title' => $row->title , ); } } //JSON形式で出力 header("Content-Type: application/json; charset=utf-8"); echo json_encode($json); //DBを閉じる $database->close(); } ?>
コード2(DatabaseClass.php)
<?php //内部文字コードを変更 mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); class Database{ var $dbServer; var $dbName; var $dbUser; var $dbPass; var $link; var $db; var $query; //DB接続 function __construct($db_name) { //DBの情報 $this->dbServer="localhost"; $this->dbName=$db_name; $this->dbUser="XXXXXX"; $this->dbPass="XXXXXX"; //ポスグレに接続 $this->link=pg_connect("host={$this->dbServer} dbname={$this->dbName} user={$this->dbUser} password={$this->dbPass}") or die(exit); //UTF-8の文字コードに変更 $this->query=pg_query($this->link,'SET NAMES utf8'); } //DBを閉じる public function close() { return pg_close($this->link); } //読み込むテーブルの選択 public function select($query) { $result=pg_query($query); $row=array(); $row=pg_fetch_assoc($result); return $row; } //指定したクエリの実行 public function query($query) { return pg_query($this->link,$query); } //JSON形式に変換用の出力 public function jsonparse($query) { $row = pg_fetch_object($query); return $row; } } ?>
補足情報(FW/ツールのバージョンなど)
phpバージョン:7.2.7
postgreSQLバージョン:10.5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/01 06:30 編集
2018/11/01 06:33
2018/11/01 06:37