【问题标题】:Wordpress MySQL - custom meta key order by key and dateWordpress MySQL - 按键和日期自定义元键顺序
【发布时间】:2015-02-20 12:58:58
【问题描述】:

我有一个由选择下拉菜单设置的元键,因此用户可以选择 1 到 14 之间的选项,然后保存他们的帖子。我希望帖子按日期从 1 到 14 显示在页面上,但是如果用户在第二天创建一组新帖子,我也希望发生这种情况,因此您每天都有帖子 1 到 14 以该顺序显示..我到目前为止的SQL如下

    SELECT  SQL_CALC_FOUND_ROWS
            wp_postmeta.meta_key, 
            wp_postmeta.meta_value,
            wp_posts.*
       FROM wp_posts  
 INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
      WHERE 1=1
        AND wp_posts.post_type = 'projectgallery'
       AND (      wp_posts.post_status = 'publish' 
               OR wp_posts.post_status = 'private')
       AND (wp_postmeta.meta_key = 'gallery_area' )
  GROUP BY wp_posts.post_date asc
  ORDER BY CAST(wp_postmeta.meta_value AS UNSIGNED) DESC,
           DATE(wp_posts.post_date) desc;

这给了我以下输出通知,即在不同日期输入的帖子按顺序显示为 1 或 3,理想情况下,我希望最新的帖子在 14 点之后直接显示,以便重新开始。数字 14 也不应该是静态的,就好像有人在选择中添加了另一个选项,那么如果删除一个选项,它就会增加和减少。

【问题讨论】:

  • 为什么 GROUP BY 在这里做? (不涉及聚合函数。)
  • 对不起,这意味着像 GROUP BY (wp_posts.post_date) asc 可能是一个疏忽,但我试图以某种分组顺序保留所有日期
  • 即使删除 group by 仍然会留下同样的问题,您有什么建议吗?

标签: mysql sql wordpress


【解决方案1】:

GROUP BY 的名称令人困惑。仅当SUM()COUNT()SELECT 子句中的某些此类函数时才有意义。在这里没用。

将 post_meta.value 放入帖子项目结果集中的规范方法是这样的。你很接近,但这更容易阅读。

SELECT  SQL_CALC_FOUND_ROWS
        ga.meta_value gallery_area,
        p.*
   FROM wp_posts p  
   LEFT JOIN wp_postmeta ga ON p.ID = ga.post_id AND ga.meta_key = 'gallery_area'
  WHERE 1=1
   AND p.post_status IN ('publish', 'private')
   AND p.post_type = 'projectgallery' 

注意JOINON 子句的两部分。执行 SQL 的这种方式可以让你得到你想要的 meta_key 值。

所以,这就是你的结果集。你会为每个帖子获得一行。如果缺少元数据,您将获得 gallery_area 的 NULL 值。

然后你必须按照你想要的方式对结果集进行排序。首先按日期排序,然后按gallery_area 排序,如下所示:

ORDER BY DATE(p.post_date) DESC, 
      0+gallery_area ASC

0+value 技巧是将值转换为整数的 sql 简写。

编辑。如果meta_value 项目包含诸如前导空格之类的无关字符,则事情可能会变得混乱。尝试用这些变化进行诊断。放

  DATE(p.post_date) pdate,
  0+ga.meta_value numga,
  ga.meta_value gallery_area

在您的 SELECT 子句中。如果numga 中的某些项目为零,这就是您的问题。

也试试

 ORDER BY DATE(p.post_date) DESC,
          0+TRIM(gallery_area) ASC

试图摆脱空格。但它们可能不是空格。

【讨论】:

  • 感谢大侠的回复,里面有一些好东西执行后我仍然得到一个奇怪的gallery_area顺序,如下3,1,3,11,12,13,14,1,2 , 4, 5, 6, 7, 8, 9, 10 ,帖子都按日期正确排序了
  • 仍然没有运气,非常奇怪 - 我可以看到这是需要永远修复但可能非常简单的事情之一
  • 您能否显示几行错误的结果集?
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多