關注0.1892018.08.09 10:31:48字數 304閱讀 4,012
create table `z_gis` (
`id` varchar(45) not null,
`name` varchar(10) not null comment '姓名',
`gis` geometry not null comment '空間位置資訊',
`geohash` varchar(20) generated always as (st_geohash(`gis`,8)) virtual,
primary key (`id`),
unique key `id` (`id`),
spatial key `idx_gis` (`gis`),
key `idx_geohash` (`geohash`)
) engine=innodb default charset=utf8mb4 comment='空間位置資訊'
insert into z_gis(id,name,gis) values
(replace(uuid(),'-',''),'張三',geomfromtext('point(108.9498710632 34.2588125935)')),
(replace(uuid(),'-',''),'李四',geomfromtext('point(108.9465236664 34.2598766768)')),
(replace(uuid(),'-',''),'王五',geomfromtext('point(108.9477252960 34.2590342786)')),
(replace(uuid(),'-',''),'趙六',geomfromtext('point(108.9437770844 34.2553719653)')),
(replace(uuid(),'-',''),'小七',geomfromtext('point(108.9443349838 34.2595663206)')),
(replace(uuid(),'-',''),'孫八',geomfromtext('point(108.9473497868 34.2643456798)')),
(replace(uuid(),'-',''),'十九',geomfromtext('point(108.9530360699 34.2599476152)'));
geomfromtext()函式是將字串格式的點座標,轉化成geometry型別,還有個字段geohash是根據gis欄位的值自動生成的,可以仔細看看建表指令碼。
select name, astext(gis) gis from z_gis where name = '張三';
astext()函式是將geometry型別轉化為字串
update z_gis set gis = geomfromtext('point(108.9465236664 34.2598766768)') where name = '張三';
select floor(st_distance_sphere(
(select gis from z_gis where name= '張三'),
gis)) distance from z_gis where name= '李四';
sql執行結果
select
name,
floor(st_distance_sphere((select
gisfrom
z_gis
where
name = '張三'),
gis)) distance,
astext(gis) point
from
z_gis
where
st_distance_sphere((select
gisfrom
z_gis
where
name = '張三'),
gis) < 500
and name != '張三';
sql執行結果
name distance point
李四 329 point(108.9465236664 34.2598766768)
王五 198 point(108.947725296 34.2590342786)
十九 317 point(108.9530360699 34.2599476152)
如果表中資料非常多時,這樣查效率會非常低,這時就會用到geohash欄位查詢
select
name,
floor(st_distance_sphere((select
gisfrom
z_gis
where
name = '張三'),
gis)) distance,
astext(gis) point
from
z_gis
where
geohash like concat(left((select geohash from z_gis where name = '張三'),6),'%')
and st_distance_sphere((select
gisfrom
z_gis
where
name = '張三'),
gis) < 500
and name != '張三';
mysql中布林搜尋 MySQL全文搜尋之布林搜尋
利用in boolean mode修改程式,mysql 也可以執行布林全文搜尋 mysql select from articles where match title,body against mysql yoursql in boolean mode id title body 1 mysql ...
MySQL中萬用字元 佔幾個位置
今天學習萬用字元 發現問題 佔幾個字元?幾乎所有的資料上所的都是乙個,若是資料庫中有字段的值為 李勇 那麼你想搜尋出來就需要用 李 可是在mysql上面實驗的結果是 李 搜尋不到,而 李 確搜尋出來了。這樣貌似 佔兩個字元。再有,若資料庫中全是英文比如 abcdefg 那麼你輸入 abcd fg 肯...
tp5 中使用 mongoDB 空間位置搜尋
在很多場景我們都會使用位置範圍服務 如 查詢附近的單車 旅店 飯店等等。tp5框架的使用還是比挺多的,關於tp5中的查詢條件已經預設擁有了near查詢處理了,但結果並不能滿足我們的一些需求。參考到一篇文章,所以對 tp5中的範圍查詢進行記錄,希望可以幫助到有同等需求的小夥伴們。需要了解mongodb...