したがって、MySQL で直接実行すると問題なく動作するクエリがありますが、Wordpress $wpdb->query() を介して実行すると失敗します。
たとえば、$qry をページにエコーアウトし、それをコピーして phpMyAdmin に貼り付けると、必要なすべての結果が得られます。ただし、Wordpress ではエラーが発生します。
エラー: WordPress データベース エラー: [SQL 構文にエラーがあります。'SELECT *, ROUND( 3963.0 * ACOS( SIN( 38.580983*PI()/180 ) * SIN( lat*PI()/18' 行) の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 21]
クエリ:
CREATE TEMPORARY TABLE tmp_locations_tbl
SELECT post.ID,
post.post_name,
lat_meta.meta_value AS lat,
lng_meta.meta_value AS lng,
address_meta.meta_value AS address
FROM wp_posts AS post,
wp_postmeta AS lat_meta,
wp_postmeta AS lng_meta,
wp_postmeta AS address_meta
WHERE post.ID = lat_meta.post_id
AND post.ID = lat_meta.post_id
AND post.ID = lng_meta.post_id
AND lat_meta.meta_key = 'geo_latitude'
AND lng_meta.meta_key = 'geo_longitude'
AND address_meta.meta_key = 'address'
LIMIT 0, 5000;
SELECT *,
ROUND( 3963.0 * ACOS( SIN( 38.580983*PI()/180 ) * SIN( lat*PI()/180 ) + COS( 38.580983*PI()/180 ) * COS( lat*PI()/180 ) * COS( (lng*PI()/180) - (-121.4931*PI()/180) ) ) , 1)
AS distance
FROM tmp_locations_tbl
HAVING distance < 25
ORDER BY distance ASC
LIMIT 0, 200;
明らかに「;」が好きではありません - またはそう推測します。しかし、これがWordpressではなくMySQLで直接うまく動作するのはなぜですか. 「;」を削除すると興味深いことに 2 つのクエリを分離するクエリから、Wordpress は正しい結果を返さず、MySQL は、phpMyAdmin を介して、それが正しくないクエリであると言います。
どんな助けでも大歓迎です。