【问题标题】:Using having in wp_query wordpress在 wp_query wordpress 中使用
【发布时间】:2016-12-01 14:48:39
【问题描述】:

我们如何在 wordpress 的 WP_Query 对象中使用 having 关键字。 例如,如果我想这样:-

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;

纬度和经度已经在我身边,所以为了计算运行时距离,我想使用分页来计算。 任何建议都会被推荐。

【问题讨论】:

  • 仅供参考,这可能不会很好地扩展,因为它必须从 TableName 获取所有行,计算 distance 值,过滤 all 结果在HAVING,然后ORDER 结果。您将获得更高的性能leveraging spatial extensions。
  • 我知道这可以通过更改 mysql 架构来实现,但我正在寻找是否可以让一些条件与 wordpress wp 查询一起使用,这些条件现在对我来说可以节省时间。
  • 如果您的目标是“简单”,那么您不能将HAVING 子句与WP_Query 一起使用。请参阅我的答案,了解如何分两步完成。

标签: php wordpress


【解决方案1】:

最简单的方法是使用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 空间扩展来执行距离查询。使用 post autosaves、history 等,这个查询很快就会对你的服务器造成负担,导致性能非常糟糕,所以它不能很好地扩展。 this other answer I wrote 中提供了一些有关如何避免这种情况的其他详细信息。

【讨论】:

    猜你喜欢
    • 2014-09-05
    • 1970-01-01
    • 2023-04-01
    • 2011-10-01
    • 2019-08-29
    • 2015-05-21
    • 1970-01-01
    • 2013-09-26
    • 2022-11-26
    相关资源
    最近更新 更多