【问题标题】:Order By doesn't work with Left Join -MySQL / WordpressOrder By 不适用于 Left Join -MySQL / Wordpress
【发布时间】:2018-06-28 10:28:18
【问题描述】:

我在上面有我的查询,它可以很好地检索数据,但排序已关闭。我正在尝试按价格订购结果。不确定我是否需要添加另一个 GROUP BY 参数或者我需要添加另一个联接。其他人有同样的问题吗?

SELECT wp_posts.ID,wp_postmeta1.meta_value AS sku, wp_postmeta2.meta_value AS Price
                        FROM wp_posts
                        LEFT JOIN wp_postmeta wp_postmeta1
                            ON wp_postmeta1.post_id = wp_posts.ID
                            AND wp_postmeta1.meta_key = '_sku'
                        LEFT JOIN wp_postmeta wp_postmeta2
                            ON wp_postmeta2.post_id = wp_posts.ID
                            AND wp_postmeta2.meta_key = '_price'
                        WHERE (wp_posts.post_type = 'product'
                        AND wp_posts.post_status = 'publish'
                        AND wp_posts.post_title LIKE '%abi%')
                        OR (wp_posts.post_type = 'product'
                        AND wp_posts.post_status = 'publish'
                        AND wp_postmeta1.meta_value LIKE '%abi%'  )
                        GROUP BY wp_posts.ID
                        ORDER BY wp_postmeta2.meta_value ASC
                        LIMIT 15

【问题讨论】:

  • 除 wp_posts.ID 之外返回的列将是不确定的(请参阅 dev.mysql.com/doc/refman/5.7/en/group-by-handling.html),并且没有聚合函数,因此 gorup by 在这里不合适
  • 您正在使用 wp_query 或自定义查询
  • 我正在使用自定义查询,如果我不使用 group by,我将多次返回相同的 ID。我相信如果我使用 wp_query 我需要使用 'orderby' => 'meta_value_num',

标签: mysql wordpress sql-order-by


【解决方案1】:

使用 cast 修复了排序。 ORDER BY CAST(wp_postmeta2.meta_value as unsigned) ASC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2011-06-02
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多