sql >> Databáze >  >> RDS >> Mysql

Potřebujete pomoc odborníka při řešení drobných změn v dotazu na prostorová data

Zdá se mi, že předpokládáte, že jakmile vyberete z.id v dotazu, že vám to dává přímý přístup k x(property) a y(property)

(Pomineme-li ta jména opravdu mají v závorkách?)

Takže podle mě to vypadá, že byste měli nahradit věci jako

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

s něčím jako

* COS(RADIANS( select x(property) from mytable where id = z.id ))

Nicméně při dalším přemýšlení si myslím, že vaše mytable nemá požadovanou strukturu. Z pohledu na odkaz se domnívám, že vaše mytable by měl mít strukturu spíše jako:

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

Abyste mohli udělat něco jako

* COS(RADIANS(z.latitude))

POZNÁMKA

Výše uvedené bylo založeno na tom, že jsem nepochopil, že MySQL podporuje typy prostorových dat (pro které netuším, jak je používat)

Aktualizovat

Jen jsem trochu googloval, abych porozuměl prostorovým typům, a našel jsem toto:

Jak používáte prostorové dotazy MySQL k vyhledání všech záznamů v okruhu X? [zavřeno]

což naznačuje, že nemůžete dělat, co chcete, s typy prostorových dat v mysql. Což vás přivádí zpět k používání neoptimálního způsobu ukládání dat v mutable

Při opětovném čtení tohoto odkazu však komentáře k odpovědi naznačují, že nyní můžete být schopni používat typy prostorových dat. (Řekl jsem vám, že zde nemám ponětí) To by znamenalo nahradit kód dotazu věcmi jako ST_Distance(g1,g2) , což v podstatě znamená úplné přepsání příkladu.

Řečeno jinak

aktualizace 2

Existují tři cesty, kterými se můžete vydat:

  1. Odmítněte existenci prostorových datových typů v MySQL a použijte tabulku, která má explicitní sloupce pro lat a long a použijte ukázkový kód, jak byl původně napsán na tomto blogu.

  2. Přijměte typy prostorových dat MySQL (bradavice a všechny) a podívejte se na věci jako tato odpověď https:/ /stackoverflow.com/a/21231960/31326 zdá se, že dělají to, co chcete, přímo s typy prostorových dat, ale jak je uvedeno v této odpovědi, existují určitá upozornění.

  3. K uložení dat použijte prostorový typ a použijte pre-query extrahovat lat a long před předáním do původního ukázkového kódu.



  1. MySQL, KDE RÁD nepracuje s více poli pomocí php a pdo bind

  2. Jak funguje funkce LOWER() v MySQL

  3. Zkontrolujte heslo hashované WordPress pomocí prostého hesla

  4. Statistiky pokrytí kódem