比较来自同一个表和列的两组数据,而不是在MySQL中调用两次表

时间:2014-10-02 14:33:12

标签: mysql sql

我正在努力使我的查询更有效率,因为它仍然很重,将来它会变得更糟。

这是我的问题:

SELECT SUM(fb_diff.shares) shares
FROM (
    SELECT (SUM(fb.shares) - SUM(fbs.shares)) shares
    FROM (
        SELECT post_id, shares
        FROM wp_facebook_total_stats
        WHERE date = '2014-08-01 00:00:00'
        GROUP BY post_id
    ) fbs
    LEFT JOIN wp_facebook_total_stats fb ON fb.post_id = fbs.post_id
    WHERE fb.date = '2014-09-28'
) fb_diff

它有效...我得到了数据......但是有没有办法在没有得到同一个表两次的情况下相同?

因为当我做EXPLAIN时,我得到了这个:

2    DERIVED     fb                        ALL      post_id    NULL       NULL   NULL   588849    Using where
3    DERIVED     wp_facebook_total_stats   index    post_id    post_id    8      NULL   588849    Using where

1 个答案:

答案 0 :(得分:0)

如果您试图根据不同的日期或失效时间来获取帖子共享之间的差异,并且不希望以递归方式连接到同一个表,我可以看到至少几个选项:

  1. 创建一个提前执行此操作的视图,然后可以对其进行缓存,然后查询视图。
  2. 通过将select语句更改为group on date和post_id,然后在代码中进行数学计算以显示共享差异,将数据拉入代码中的数组。
  3. 如果可能,修改您的架构以更好地满足您的需求。例如,向wp_facebook_total_stats添加一列,显示股票与前一天,前一周,上个月等之间的差异。无论您需要完成任务,都需要。
  4. 每个选项都有其优点和缺点,请仔细考虑。

    希望这会有所帮助,祝你好运。