簡體   English   中英

自定義MySQL Order By(取決於PHP函數值)

[英]Custom MySQL Order By depending on a PHP function value

我有一個這樣的數據庫

http://i.stack.imgur.com/MHEwr.jpg

我有一個PHP函數,該函數將計算該地址與用戶(網絡用戶)的距離{get_distance($ person_location)}。

我需要一個查詢,該查詢將使用該函數並按與用戶的距離(使用PHP的{get_distance($ person_location)}函數)從數據庫順序返回數據。

誰能幫我嗎?

您無法通過PHP函數的結果在服務器端對SQL結果進行排序。*

有兩種方法可以解決您的一般問題:

1.將計算移至SQL

您的距離計算可能依賴於地理坐標(緯度和經度)。 將這些數據保存到數據庫中的每個地址,然后也用SQL執行距離計算。

在此處找到有關如何在MySQL中執行此操作的更多信息: 查找兩個緯度/經度點之間距離的最快方法

您的待辦事項清單。 一次執行以下操作:

  • 從數據庫獲取所有地址
  • 使用您的PHP API計算每個地址的地理位置坐標
  • 更新您的數據庫並將這些地理坐標放入額外的列中

從現在開始執行以下操作:

  • 每次向表中添加一行時,請事先使用API​​計算地理坐標,並同時添加它們
  • 每次您更改數據庫中的地址時,都使用您的PHP API計算新的地理坐標並進行更新
  • 每次您需要計算當前用戶到所有其他地址的距離時,請執行SELECT查詢以計算距離並進行排序

2.用PHP做所有事情

在數據庫中查詢所有地址,將它們放入PHP數組,使用函數計算到當前用戶的距離,然后對數組進行排序。

我強烈建議不要這樣做,而是在服務器端實現所有方法(方法1)。

* 從理論上講,您可以通過以下方法進行計算:離線計算每個地址的距離,使用結果更新臨時表,然后使用該臨時表再次查詢表以對結果進行排序。 但是,這比用PHP進行所有操作還要糟糕,您甚至不應該考慮這一點!

恕我直言,不可能在查詢中使用PHP函數,只能使用MySQL提供的聚合函數之類的東西。 我想您需要通過PHP處理數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM