Wordpress 和 MariaDB:排序(内部使用内部联接)不起作用?

问题描述 投票:0回答:2

我在运行 MariaDB 的开发机器上使用 WAMP。在服务器上我使用MySQL。主页是按元值排序的事件列表:event_date。这是由 Wordpress 生成的查询

SELECT   wp_posts.ID, wp_postmeta.meta_value
                    FROM wp_posts  INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )  INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id )
                    WHERE 1=1  AND ( 
  wp_postmeta.meta_key = 'event_date_time' 
  AND 
  ( 
    ( 
      ( mt1.meta_key = 'event_date_time' AND CAST(mt1.meta_value AS DATE) >= '2024-04-09' )
    )
  )
) AND wp_posts.post_type = 'tc_events' AND ((wp_posts.post_status = 'publish'))
                    GROUP BY wp_posts.ID
                    ORDER BY wp_postmeta.meta_value ASC
                    LIMIT 0, 200;

这是使用参数的普通 WordPress WP_Query。 在服务器(Ubuntu/Apache/MySQL)上运行良好。但在运行 MariaDB 的笔记本电脑上,Order By 被忽略。浏览 intarwebs,似乎 MariaDB 更严格地遵守 SQL 标准,并且 Order By 存在问题。但是同一个 intarwebs 上的所有内容都表明 MariaDB 适合 Wordpress?

wordpress mariadb sql-order-by
2个回答
0
投票

从技术上讲,WordPress 应该可以与 MariaDB 一起正常工作,并且查询应该在 MySql 和 MariaDB 上产生相同的结果。您需要验证是否存在任何版本冲突https://make.wordpress.org/hosting/handbook/compatibility/#wordpress-php-mysql-mariadb-versions

MariaDB 对于同时使用 GROUP BY 和 ORDER BY 的查询往往更加严格。在 MariaDB 中,您需要在 GROUP BY 子句中包含 SELECT 子句中的所有非聚合列。 所以尝试改变你的 GROUP BY 子句

GROUP BY wp_posts.ID,wp_postmeta.meta_value

0
投票

查询

JOINs
wp_postmeta
两次。
ORDER BY
中使用的那个是不明确的。以下可能解决该问题以及许多其他问题:

SELECT  wp_posts.ID, mt1.meta_value
    FROM  wp_posts
    INNER JOIN  wp_postmeta AS mt1  ON ( wp_posts.ID = mt1.post_id )
    WHERE  mt1.meta_key = 'event_date_time'
      AND  mt1.meta_value >= '2024-04-09'
      AND  wp_posts.post_type = 'tc_events'
      AND  wp_posts.post_status = 'publish'
    ORDER BY  mt1.meta_value ASC
    LIMIT  0, 200;

备注:

  • GROUP BY
    似乎没用(或者可能不正确)
  • 这假设日期以“2024-04-09...”等语法存储在 mt1 中
  • 这个插件应该有助于提高性能:WP索引改进
© www.soinside.com 2019 - 2024. All rights reserved.