最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

漂流瓶推送需求的邏輯實(shí)現(xiàn)代碼

 更新時(shí)間:2010年12月17日 11:09:28   作者:  
假想有一個(gè)瓶子池,當(dāng)點(diǎn)擊附近標(biāo)簽的時(shí)候要從池里面推送一個(gè)瓶子給用戶.推送按照一定的邏輯對(duì)池里的瓶子排序,排序規(guī)則主要由兩個(gè)數(shù)據(jù)決定:瓶子上次推送時(shí)間和與用戶之間的距離.
本身這兩個(gè)數(shù)據(jù)之間沒有關(guān)聯(lián),并且sql語句里面的排序規(guī)則不能滿足要求:sql里只有數(shù)據(jù)中前一個(gè)排序條件出現(xiàn)相同的情況時(shí)才考慮后面的排序條件.實(shí)際情況是如果按先推送時(shí)間后距離排序的話,距離就起不了作用,反之亦然.

要讓兩個(gè)數(shù)據(jù)產(chǎn)生關(guān)聯(lián),有一種做法是將這兩個(gè)數(shù)據(jù)做加法或減法后排序,但是這必須要考慮以下情況

兩個(gè)數(shù)據(jù)的數(shù)據(jù)類型不一致,一個(gè)是日期類型另一個(gè)是雙精度類型
必須統(tǒng)一兩個(gè)數(shù)據(jù)的排序方向,不能推送時(shí)間取正序而距離取反序,視實(shí)際需求而定
將這兩個(gè)數(shù)據(jù)都轉(zhuǎn)換成一種類型,需要一個(gè)系數(shù)來平衡它們.如果一個(gè)數(shù)據(jù)數(shù)量級(jí)極大,另一個(gè)數(shù)據(jù)數(shù)量極小,那么極小的數(shù)據(jù)再怎么變化對(duì)極大的數(shù)據(jù)產(chǎn)生的影響也可以忽略
下面來具體實(shí)現(xiàn),首先將日期類型轉(zhuǎn)換為雙精度類型,操作兩個(gè)數(shù)值類型的數(shù)據(jù)相對(duì)來說比較容易.mysql里面正好有這樣的函數(shù):unix_timestamp(date) -- 直接返回內(nèi)部時(shí)戳值
復(fù)制代碼 代碼如下:

-- 相差一天的時(shí)戳值
select unix_timestamp('2010-12-13') - unix_timestamp('2010-12-12')
-- 計(jì)算結(jié)果:86400

關(guān)于已知兩地經(jīng)緯度計(jì)算距離的公式,在網(wǎng)上搜索了一個(gè),計(jì)算結(jié)果還算滿意
復(fù)制代碼 代碼如下:

ROUND((2 * ASIN(SQRT(POWER(SIN(((LAT*PI()/180.0)-(plat*PI()/180.0)) / 2), 2) + COS(LAT*PI()/180.0) * COS(plat*PI()/180.0) * POWER(SIN((LNG*PI()/180.0-plng*PI()/180.0) / 2), 2))))*6378.137*10000,3)/10000)

接下來考慮兩個(gè)數(shù)據(jù)的排序方向,我們希望的是:距離上次推送時(shí)間越久越好,與用戶之間的距離越近越好.時(shí)間越久那么計(jì)算得出的差值就越大,兩個(gè)數(shù)據(jù)直接相加明顯不行.這里只好將時(shí)間取負(fù)值來滿足與用戶之間的距離越近越好的要求,然后再按正序排列.

再來讓這兩個(gè)數(shù)在同一數(shù)量級(jí),根據(jù)數(shù)據(jù)測(cè)試,時(shí)間取的是秒,距離算出來是公里,直接把距離乘上一個(gè)系數(shù)(1000)換算成米來平衡二者.

最終的推送語句如下:
復(fù)制代碼 代碼如下:

select BottleID,(ROUND((2 * ASIN(SQRT(POWER(SIN(((LAT*PI()/180.0)-(plat*PI()/180.0)) / 2), 2) + COS(LAT*PI()/180.0) * COS(plat*PI()/180.0) * POWER(SIN((LNG*PI()/180.0-plng*PI()/180.0) / 2), 2))))*6378.137*10000,3)/10000)as Distance from Bottle
inner join Venue_Mapabc
on Bottle.VenueID = Venue_Mapabc.VenueID
where Bottle.IsDrift =1 and Bottle.IsEmpty =1 and IsFinished=0 and Venue_Mapabc.City = pCity
-- and (ROUND((2 * ASIN(SQRT(POWER(SIN(((LAT*PI()/180.0)-(plat*PI()/180.0)) / 2), 2) + COS(LAT*PI()/180.0) * COS(plat*PI()/180.0) * POWER(SIN((LNG*PI()/180.0-plng*PI()/180.0) / 2), 2))))*6378.137*10000,3)/10000)>1.5
order by

(-(unix_timestamp(now())-unix_timestamp(Bottle.PlaceTime))*0.5 +
(ROUND((2 * ASIN(SQRT(POWER(SIN(((LAT*PI()/180.0)-(plat*PI()/180.0)) / 2), 2) + COS(LAT*PI()/180.0) * COS(plat*PI()/180.0) * POWER(SIN((LNG*PI()/180.0-plng*PI()/180.0) / 2), 2))))*6378.137*10000,3)/10000)*0.5*1000)


limit 1;

前端截圖:

相關(guān)文章

  • VScode?隱藏大量無用的文件比如在看Linux?kernel或boot時(shí)候

    VScode?隱藏大量無用的文件比如在看Linux?kernel或boot時(shí)候

    這篇文章主要介紹了VScode?隱藏大量無用的文件比如在看Linux?kernel或boot時(shí)候,VScode 工程創(chuàng)建先在 Ubuntu 下編譯一下 uboot,然后將編譯后的 uboot 文件夾復(fù)制到 windows 下,并創(chuàng)建VScode 工程,需要的朋友可以參考下
    2022-10-10
  • ImageMagick免費(fèi)開源圖片批處理利器使用詳解

    ImageMagick免費(fèi)開源圖片批處理利器使用詳解

    這篇文章主要為大家介紹了ImageMagick免費(fèi)開源圖片批處理利器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 在Linux下搭建Git服務(wù)器的方法詳解

    在Linux下搭建Git服務(wù)器的方法詳解

    雖然用Git的人不多,但是git不僅僅是svn等版本控制系統(tǒng)的替換工具,它自己強(qiáng)大的功能,穩(wěn)定的性能,方便快捷等優(yōu)點(diǎn)自然不需多說,不了解的人自行去網(wǎng)上查看。本文將會(huì)詳細(xì)介紹在Linux下搭建Git服務(wù)器的方法,有需要的朋友們可以參考借鑒。
    2016-09-09
  • git 一個(gè)可以提高開發(fā)效率的命令:cherry-pick詳解

    git 一個(gè)可以提高開發(fā)效率的命令:cherry-pick詳解

    這篇文章主要介紹了git 一個(gè)可以提高開發(fā)效率的命令:cherry-pick,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • IDEA編寫SQL語句沒有提示的解決辦法

    IDEA編寫SQL語句沒有提示的解決辦法

    這篇文章主要給大家介紹了關(guān)于IDEA編寫SQL語句沒有提示的解決辦法,在IDEA中如果你在編寫SQL語句時(shí)沒有得到語法提示,可能是因?yàn)闆]有正確配置數(shù)據(jù)庫連接或者缺少相應(yīng)的插件,需要的朋友可以參考下
    2023-08-08
  • 詳解版本控制利器Git,SVN的異同以及適用范圍

    詳解版本控制利器Git,SVN的異同以及適用范圍

    本文通過對(duì)版本控制程序git及SVN進(jìn)行對(duì)比分析其優(yōu)缺點(diǎn),以及他們的適用范圍,希望對(duì)大家能有所幫助
    2014-11-11
  • IDEA配置以及插件和快捷鍵超全總結(jié)

    IDEA配置以及插件和快捷鍵超全總結(jié)

    這篇文章主要給大家介紹了關(guān)于IDEA配置以及插件和快捷鍵的相關(guān)資料,學(xué)習(xí)軟件工程的同學(xué)基本上都要用到idea,并且它也是目前比較主流的開發(fā)工具,需要的朋友可以參考下
    2023-07-07
  • 網(wǎng)絡(luò)抓包工具wireshark入門教程詳解

    網(wǎng)絡(luò)抓包工具wireshark入門教程詳解

    Wireshark是一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包分析軟件,功能非常強(qiáng)大,奈何他是英文版的,今天就為大家詳細(xì)介紹一下網(wǎng)絡(luò)抓包工具wireshark的使用教程
    2018-10-10
  • ChatGPT如何寫好Prompt編程示例詳解

    ChatGPT如何寫好Prompt編程示例詳解

    這篇文章主要為大家介紹了ChatGPT如何寫好Prompt編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 關(guān)于使用mvn deploy命令將本地jar包上傳到maven私服的問題(收藏)

    關(guān)于使用mvn deploy命令將本地jar包上傳到maven私服的問題(收藏)

    這篇文章主要介紹了使用mvn deploy命令將本地jar包上傳到maven私服,分享本篇教程可以幫助多數(shù)朋友少走彎路,本文具有很好的收藏價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

河西区| 安宁市| 明水县| 新巴尔虎左旗| 普陀区| 西安市| 长沙县| 姜堰市| 克东县| 修武县| 当涂县| 惠水县| 惠州市| 岳阳县| 文水县| 扎赉特旗| 南溪县| 长治县| 方正县| 西盟| 衡水市| 夏邑县| 桃园县| 凤城市| 宝山区| 巫溪县| 平利县| 喀喇| 溆浦县| 嘉义市| 营口市| 全椒县| 绥德县| 余庆县| 永定县| 宁化县| 濮阳县| 滨海县| 蕲春县| 广昌县| 常宁市|