当前位置: 首页 > 知识库问答 >
问题:

Wordpress按距离排序和功能后置查询

蒲昊
2023-03-14

我正在尝试一个mysql查询来根据距离排序帖子,比如说在半径250英里内,所有的工作都很好,除了我需要以一种方式排序帖子,特色帖子总是在顶部。这是我的mysql查询(我正在wordpress上做)。

    SELECT SQL_CALC_FOUND_ROWS wp_posts.*, ( 3959 * acos( cos( radians(40.140711) ) * cos(      radians( latitude.meta_value ) ) * cos( radians( longitude.meta_value ) - radians(-74.20619299999998) ) + sin( radians(40.140711) ) * sin( radians( latitude.meta_value ) ) ) ) AS distance , 
latitude.meta_value AS latitude , 
longitude.meta_value AS longitude
    FROM wp_posts 
    INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
    INNER JOIN wp_postmeta AS latitude ON wp_posts.ID = latitude.post_id 
    INNER JOIN wp_postmeta AS longitude ON wp_posts.ID = longitude.post_id 
    WHERE 1=1 
    AND wp_posts.post_type = 'event' 
    AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'recurring') 
    AND (wp_postmeta.meta_key = 'st_date' ) 
    AND latitude.meta_key="geo_latitude" 
    AND longitude.meta_key="geo_longitude" 
    AND wp_posts.ID in (SELECT tr.object_id FROM wp_term_relationships tr JOIN wp_term_taxonomy t on t.term_taxonomy_id=tr.term_taxonomy_id WHERE t.term_id IN ('3','4','5','6','7','8','9','10')) 
    AND (wp_posts.ID IN (SELECT wp_postmeta.post_id FROM wp_postmeta WHERE wp_postmeta.meta_key='st_date' 
    AND date_format(wp_postmeta.meta_value,'%Y-%m-%d') >'2013-09-23 14:35:58')) 
    GROUP BY wp_posts.ID HAVING distance <= 250 
    ORDER BY (SELECT wp_postmeta.meta_value FROM wp_postmeta, wp_posts AS p where wp_postmeta.post_id=p.ID AND wp_postmeta.meta_key = 'featured_h') ASC, distance ASC LIMIT 0, 10

问题是ORDER BY,它给我的错误是“Subquery returns多于1行”

如果删除ORDER BY(从wp_postmeta中选择wp_postmeta.meta_value,wp_posts为p,其中wp_postmeta.post_id=p.id,wp_postmeta.meta_key='featured_h'

它的工作很好,但它没有显示出顶部的fetaured柱子,任何方法来修复它。

共有1个答案

孔建柏
2023-03-14

在resultset中放置一列,显示featureed状态。我相信,您必须再次加入wp_postmeta才能实现这一点。

然后使用

 ORDER BY status, distance

或者也许

 ORDER BY STATUS='featured', distance

这将把你的特色帖子首先按距离排序,然后是其余的。

(将子查询放在order by子句中是很奇怪的。)

 类似资料:
  • 问题内容: 我有以下模型: 我应如何查询以距离排序(距离为无穷大)? 如果需要,可以在PosgreSQL,GeoDjango上工作。 问题答案: 首先,最好使一个点字段而不是使lat和lnt分开: 然后,你可以像这样过滤它:

  • 问题内容: 无法弄清楚如何对用户附近的 地址 进行自动 排序 。我不明白从哪里开始以及如何编写代码。 我的 firebase中 有地址。地址的类型为字符串(不是纬度/经度)。例: 我知道需要从firebase 使用 查询 ,但是如何使用 query ,我现在不明白。 这是我的代码: 如何使用 Firebase中的* 数据在用户附近自动 排序 地址? * 问题答案: 这是一个复杂的过程,需要多个步骤

  • 问题内容: 这是我拥有的代码,并且可以正常工作(返回按难度排序的所有问题): 但是我认为我必须优化此代码。有可能更改具有我的功能的代码吗?我的函数返回一个数字。我尝试了类似的东西: 但我收到错误消息。 问题答案: 混合属性是既充当Python属性又充当SQL表达式的特殊方法。只要您的函数可以用SQL表示,它就可以像普通列一样用于过滤和排序。 例如,如果按照问题的鹦鹉数来计算难度,如果问题的天数超过

  • 我有一篇有三个元域的帖子。 我想查询这个类别,并根据其中一个的元字段值对帖子进行排序。我现在使用的参数是: 其中times是元字段的名称。上面的代码没有返回任何内容。

  • 我正在尝试按地理距离对具有嵌套地理点映射的索引进行排序。 这是我的简化映射: 这里,每个组织可以有几个地点点。 文档: 这是我的查询(PHP数组): 预期结果 : 我希望按geo_point排序资源(检查每个位置,然后检查某个位置是否靠近给定的纬度/经度)

  • 问题内容: 我有一个要排序的对象数组,每个对象都有两个参数:强度和名称 我想先按强度排序,然后再按字母顺序排序。我正在使用以下代码对第一个参数进行排序。然后如何排序? 谢谢你的帮助。 问题答案: 这样扩展您的排序功能; 一个和比较对字符串 是 字母比较。