亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 3 個數據庫表對產品進行地理定位

嘗試使用 3 個數據庫表對產品進行地理定位

PHP
婷婷同學_ 2023-10-15 16:04:50
嗯,我正在 WordPress 中創建一個包含地理定位產品的商店。問題是,當我使用搜索引擎時,我需要進行一個有點困難的查詢,因為正如我所說,它涉及3個表。我有這些桌子wp_stores。我在哪里存儲我擁有的商店的位置wp_product_store_relations。我保持產品和商店之間的關系,這是一種(商店)與許多(產品)的關系然后 ,product_id來自id, 來自表wp_posts,這是 WordPress 中默認使用的用于存儲所有類型帖子的表,它按類型分類:有博客帖子、產品等...問題是我必須使用該表對數據庫進行查詢wp_posts,但是當然,在搜索引擎中的同時我想按距離對所有內容進行排序,所以我必須找出哪個商店有每個產品order 知道商店位置和順序,然后按距離排序。事實上,我已經在索引中執行此操作,但我使用 3 個查詢執行此操作。在這里,我想將所有內容統一為一個,因為 WordPress 強迫我這樣做(我想這是為了優化任務而這樣做的)。按距離獲取產品 id 的主要代碼如下(這是索引代碼):$query = "SELECT *,             POW(69.1 * (latitude - $lat), 2) +            POW(69.1 * ($lon - longitude) * COS(latitude / 57.3), 2) AS distance FROM wp_stores HAVING distance < POW($distance, 2) ORDER BY distance ASC";其中$lat和 $lon是gps的坐標 $distance就是距離,即50公里這很好用,因為從這里我可以獲取商店,然后從商店我可以在另一個查詢中獲取產品或執行子查詢以提高性能(我知道它可以改進......)問題是,現在我需要進行一個相當長的查詢,并且我已經做了一些事情,但是......它有我無法解決的語法錯誤。SELECT *, (SELECT latitude, longitude FROM wp_stores LEFT JOIN wp_product_store_relations ON wp_stores.store_id = wp_product_store_relations.store_id AND wp_product_store_relations.product_id = t1.ID) as store, POW(69.1 * (store.latitude - $lat), 2) +            POW(69.1 * ($lon - store.longitude) * COS(store.latitude / 57.3), 2) AS distance FROM wp_posts t1 WHERE wp_posts.post_type = "product" HAVING distance < POW(50, 2) ORDER BY distance ASC
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

我在您的查詢中主要發現了兩個問題:

  • 加入t1.ID導致出現以下錯誤 MySQL:“#1054 - 'on 子句'中的未知列 't1.ID'”,即使我不確定原因;

  • 您的子查詢返回 2 列(latitudelongitude),這會導致錯誤“#1241 - 操作數應包含 1 列”


我的建議如下:

SELECT wp_posts.*,

       (POW(69.1 * (stores.latitude - $lat), 2) +

        POW(69.1 * ($lon - stores.longitude) * COS(stores.latitude / 57.3), 2)) AS distance

FROM wp_posts

  LEFT JOIN wp_product_store_relations ps ON ps.product_id = wp_posts.ID

  LEFT JOIN wp_stores stores USING (store_id)

WHERE wp_posts.post_type = "product"

  HAVING distance < POW(50, 2)

ORDER BY distance ASC;

注意:我想我的查詢可以通過加入wp_stores僅包含相關商店(具有產品和距離約束)而不是整個表的子集來優化,但沒有進一步調查。


編輯:刪除wp_posts表上的別名。


查看完整回答
反對 回復 2023-10-15
  • 1 回答
  • 0 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號