MYSQL 按查询顺序

标签 mysql wordpress woocommerce

如果我有自定义帖子类型 (post_type),并且我想保证帖子类型为 product 的任何内容都出现在搜索结果中的其他任何内容之前,那么如何我能实现这个目标吗?最好只更改查询的 order by 部分。

目前我有:

 ORDER BY posts.post_type DESC, posts.post_date DESC

此方法有效,但在 DESC 上,另一种类型的 testimonial 出现在 product 之前。在 ASC 上,不同的自定义帖子类型 articles 出现在 product 之前,但我需要 product 首先出现(它们已排序)按 post_date 排序),然后是其他所有内容 - 也按 post_date 排序。

完整代码:

add_filter('posts_orderby','search_sort_custom',10,2);
function search_sort_custom( $orderby, $query )
{
    global $wpdb;

    if(!is_admin() && is_search()) {
        $orderby =  $wpdb->prefix."posts.post_type DESC, {$wpdb->prefix}posts.post_date DESC";

    }
   return  $orderby;
}

最佳答案

您可以在 ORDER BY 子句中使用表达式:

ORDER BY posts.post_type='product' DESC,
         posts.post_type DESC,
         posts.post_date DESC

如果您有更多要求,您可以这样做:

ORDER BY posts.post_type='product' DESC,
         posts.post_type='testimonial' DESC,
         posts.post_type DESC,
         posts.post_date DESC

或使用FIND_IN_SET:

ORDER BY FIND_IN_SET(posts.post_type,'product, testimonial'), 
         posts.post_type DESC,
         posts.post_date DESC

理想情况下,我会将产品类型转移到另一个表,并为每种类型指定一个优先级整数。这样您就可以完全控制顺序,而不会发生这样的戏剧性事件!

关于MYSQL 按查询顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25983840/

相关文章:

javascript - 在 wordpress 和 woocommerce 中禁用 zxcvbn.min.js

php - 使用 date_i18n 格式化 WooCommerce 传递消息的日期

php - 处理订单邮件模板中基于产品类别的条件显示

php - 基于购物车商品数量的购物车折扣,仅适用于非促销商品

mysql - R Shiny 应用程序中的 SQL 查询语法 - CAST

mysql - 找出 1 周的最大输家

mysql - 我在更新 wp_post 时收到 'Query execution was interrupted' 错误?

php - MySql 用户 '' @'localhost' 访问数据库被拒绝

javascript - 使用 jQuery 和 PHP 从 MySQL 数据库查询的 JSON 数据填充 HTML 选择字段

php - 使用 WooCommerce 和任何第 3 方启用 SSO