2016-12-01 7 views
0

というキーワードをwordpressのWP_Queryオブジェクトに使用するにはどうすればよいですか?例えば 言ってやるが、私はこのようにそれを持っているしたい場合: -wp_queryワードプレスでの使用

SELECT latitude, longitude, SQRT(
    POW(69.1 * (latitude - [startlat]), 2) + 
    POW(69.1 * ([startlng] - longitude) * COS(latitude/57.3), 2)) AS distance 
FROM TableName HAVING distance < 25 ORDER BY distance; 

緯度と経度はので、私はページネーションを使用していることをやりたいのランタイム距離を計算するために私と一緒にすでにあります。 提案があれば教えてください。

+0

FYIでは、 'TableName'からすべての行を取得し、' distance'値を計算し、 'HAVING'で結果をすべてフィルタリングし、次に' ORDER'で結果をフィルタリングしなければならないので、結果。あなたははるかに高いパフォーマンス(空間拡張を活用する)を得るでしょう(http://stackoverflow.com/a/12540625/1427161)。 – doublesharp

+0

これはmysqlスキーマを変更することによって可能であることを私は理解していますが、今私にとって時間節約になる条件を持つwordpress wpクエリで使用される条件を持つことができるかどうかを見ていました。 –

+0

あなたの目標が "簡単"なら、あなたは 'WP_Query'で' HAVING'節を使うことはできません。 2つのステップでそれを行う方法については、私の答えを参照してください。 – doublesharp

答えて

0

これを行う最も簡単な方法はpost__inパラメータを使用してpost.ID値の配列をWP_Queryに渡すことです。

// get all the post_ids that match your spatial criteria 
global $wpdb; 
$sql = 'SELECT post_id FROM TableName WHERE...'; 
$post_ids = $wpdb->get_results($sql, ARRAY_N); 

// fetch the post data using the $posts_ids 
$query = WP_Query(array('post__in' => $post_ids)); 

トリガーと空間インデックスを使用するスキームを使用して、バウンディングボックスとMySQL空間拡張を使用して距離クエリを実行することをお勧めします。 autosaves、historyなどのポスティングでは、このクエリはサーバー上で急速に負荷がかかり、パフォーマンスが非常に悪くなり、スケーラビリティが向上しません。これを回避する方法の詳細については、this other answer I wroteを参照してください。

関連する問題