【问题标题】:MySQL query with SUM and order带有 SUM 和顺序的 MySQL 查询
【发布时间】:2014-03-17 05:20:52
【问题描述】:

我的查询有什么问题?有人可以帮帮我吗?

我收到此错误消息

“未知列'wp_gdsr_data_article。 (SUM(user_voters)+SUM(visitor_voters))' in 'order Clause'"

但存在“wp_gdsr_data_article”列

    SELECT *
    FROM `wp_posts`
    INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = ID AND wp_term_relationships.term_taxonomy_id = 1
    INNER JOIN wp_gdsr_data_article ON post_id = ID
    WHERE `post_status` = 'publish'
    AND `post_type` = 'post'
    ORDER BY `wp_gdsr_data_article`.`(SUM(user_voters)+SUM(visitor_voters))` DESC
    LIMIT 1 , 30

【问题讨论】:

  • i 你的代码很好尝试删除你的引号,..
  • ...但存在“wp_gdsr_data_article”列。从您的 SQL 查询来看,它似乎不是列而是表。

标签: mysql wordpress sum


【解决方案1】:

您在 ORDER 子句中使用的表达式不是表的列。
因此,您不能在表达式的结果中使用表标识符。

这是错误的。

ORDER BY `wp_gdsr_data_article`.`(SUM(user_voters)+SUM(visitor_voters))` DESC

改成:

ORDER BY (SUM(user_voters)+SUM(visitor_voters)) DESC

你不能像这样在ORDER BY 子句中直接使用任何聚合函数。
分别计算SUM... 部分,然后在ORDER BY 中使用。

SELECT * from (
    SELECT *, (SUM(user_voters)+SUM(visitor_voters)) total
    FROM `wp_posts`
    INNER JOIN wp_term_relationships 
            ON wp_term_relationships.object_id = ID 
               AND wp_term_relationships.term_taxonomy_id = 1
    INNER JOIN wp_gdsr_data_article 
            ON post_id = ID
    WHERE `post_status` = 'publish'
      AND `post_type` = 'post'
    LIMIT 1 , 30
) results
ORDER BY total

参考How to ORDER BY a SUM() in MySQL?

【讨论】:

    【解决方案2】:

    从语句中的所有列和表名中删除引号。除了 Order by part 应该基于我们语句中的列或评估值之外,您使用它的方式是错误的。您需要先评估您在 order by 部分中使用的部分,然后再将其用于 order by,如下所示(未经测试):

    SELECT (SUM(wp_gdsr_data_article.user_voters)+SUM(wp_gdsr_data_article.visitor_voters) as total_voters), *
    FROM wp_posts 
      INNER JOIN wp_term_relationships 
         ON wp_term_relationships.object_id = ID 
           AND wp_term_relationships.term_taxonomy_id = 1
      INNER JOIN wp_gdsr_data_article 
         ON post_id = ID
    WHERE post_status = 'publish' AND post_type = 'post'
    ORDER BY total_voters DESC
    LIMIT 1 , 30
    

    【讨论】:

      【解决方案3】:

      试试这个

      SELECT *, (SUM(wp_gdsr_data_article.user_voters)+SUM(wp_gdsr_data_article.visitor_voters)) AS someSum
      FROM `wp_posts`
      INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = ID AND wp_term_relationships.term_taxonomy_id = 1
      INNER JOIN wp_gdsr_data_article ON post_id = ID
      WHERE `post_status` = 'publish'
      AND `post_type` = 'post'
      ORDER BY someSum DESC
      LIMIT 1 , 30
      

      【讨论】:

      • 这不会被编译。
      • 现已更正。假设user_voterswp_gdsr_data_article 的列
      猜你喜欢
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多