sql >> データベース >  >> RDS >> Mysql

空間データクエリの小さな変更を解決するには、専門家の助けが必要です

    z.idを選択すると、 クエリでは、これによりx(property)に直接アクセスできるようになります およびy(property)

    (余談ですが、これらの名前には本当に括弧が含まれていますか?)

    だから私にはあなたが次のようなものを置き換える必要があるように見えます

    * COS(RADIANS(z.(x(property))))
    

    のようなもので
    * COS(RADIANS( select x(property) from mytable where id = z.id ))
    

    しかし、さらに考えてみると、あなたのmytable 必要な構造がありません。リンクを見ると、あなたのmytable 次のような構造にする必要があります:

    +-----------+----------------+
    | Field     |    Type        |
    +-----------+----------------+
    |  id       |        Int(10) |
    | latitude  |        Float   |
    | longitude |        Float   |
    +-----------+----------------+
    

    のようなことができるように
    * COS(RADIANS(z.latitude))
    

    上記は、MySQLが空間データ型をサポートしていることを理解していないことに基づいています(使用方法がわかりません)

    更新

    空間タイプを理解するためにグーグルを行ったところ、次のことがわかりました:

    MySQL空間クエリを使用してX半径内のすべてのレコードを検索するにはどうすればよいですか? [クローズ]

    これは、できないことを示唆しています mysqlの空間データ型でやりたいことを実行します。したがって、mutableにデータを保存する最適でない方法を使用することに戻ります。

    ただし、そのリンクを読み直すと、回答へのコメントは、空間データ型を使用できるようになる可能性があることを示しています。 (ここには手がかりがないことをお伝えしました)これは、クエリコードをST_Distance(g1,g2)のようなものに置き換えることを意味します 、これは事実上、例を完全に書き直すことを意味します。

    別の言い方をすれば

    アップデート2

    たどることができる3つのパスがあります:

    1. MySQLに空間データ型が存在することを拒否し、latの明示的な列を持つテーブルを使用します およびlong 、そのブログに最初に書かれたサンプルコードを使用します。

    2. MySQLの空間データ型(いぼおよびすべて)を採用し、この回答のようなものを見てください https:/ /stackoverflow.com/a/21231960/31326 これは、空間データ型で直接必要なことを実行しているように見えますが、その回答に記載されているように、いくつかの注意点があります。

    3. 空間タイプを使用してデータを保持し、pre-queryを使用します latを抽出するには およびlong 元のサンプルコードに渡す前に。



    1. ユニコーンはプールサイズを尊重せずにMySQL接続を消費します-Rails

    2. 列num_rowsでビューを作成します-MySQL

    3. phpunitでPDOをあざける

    4. MySQLストアドプロシージャ、パンダ、および複数のステートメントを実行するときにmulti=Trueを使用する