繁体   English   中英

MySQL循环和多个LEFT连接

[英]MySQL loop and multiple LEFT joins

我得到以下代码:

SELECT 
      COALESCE(rv.views, 0) as views
   FROM 
      ( select 0 as n 
        union all select 1 
        union all select 2 
        union all select 3 ) n 
        LEFT JOIN restaurant_views rv 
           on rv.date = date_add("2015-02-24", interval - n.n day) 
           and restaurant_id = 192

在此处输入图片说明

此代码为我提供了餐厅最近4天的观看次数。
我正在寻找一个类似的查询,以获取过去4天餐厅的喜欢人数。

这是我到目前为止所得到的:

SELECT 
      ( COUNT( DISTINCT a.restaurant_id) 
      + COUNT( DISTINCT d.restaurant_id)) as num_likes
   FROM 
      ( select 0 as n 
        union all select 1 
        union all select 2 
        union all select 3 ) n 
         LEFT JOIN apple_likes a 
            on a.vote_date = date_add("2015-02-24", interval - n.n day) 
            and a.restaurant_id = 192
         LEFT JOIN android_likes d 
            on d.vote_date = date_add("2015-02-24", interval - n.n day) 
            and d.restaurant_id = 192

这是输出,正如您所看到的,不是我在寻找什么:
在此处输入图片说明

要在上一次查询中获得喜欢的次数,我必须更改什么?
(我检查了餐厅整天都喜欢,所以我肯定查询有问题)

试试这个:

SELECT 
      ( a.likes) 
      + d.likes) as num_likes
   FROM 
      ( select 0 as n 
        union all select 1 
        union all select 2 
        union all select 3 ) n 
         LEFT JOIN (
            SELECT vote_date,COUNT(*) as likes 
            FROM apple_likes
            WHERE restaurant_id = 192
            GROUP BY restaurant_id, vote_date
         ) as a 
            on a.vote_date = date_add("2015-02-24", interval - n.n day) 
         LEFT JOIN (
            SELECT vote_date, COUNT(*) as likes 
            FROM android_likes 
            WHERE restaurant_id = 192
            GROUP BY restaurant_id, vote_date
         ) as d 
            on d.vote_date = date_add("2015-02-24", interval - n.n day) 

我能想到的可能是您遇到的一些问题...

  1. 仅仅因为有人看过餐厅,是否就意味着他们实际上投票了??? 如果投票的话,苹果或android仅有的两个设备是吗? 如果从浏览器查看并且它们位于基于Windows计算机的浏览器上怎么办?

  2. 日期平等。 在餐厅视图表中,日期字段始终为时间= 12:00:00(即:午夜/当天早上)。 如果表决的时间戳记不是12:00:00,则您正在尝试比较日期=日期+时间可能失败。 您可能需要比较一下date(vote_date)= date(date_add(...)),所以这两种方式都忽略了时间分量……现在,这么说,date列上的函数不会运行即使餐厅ID是数字并且是索引键的一部分,也可以进行优化...它也会被部分优化。 您可能只想添加AND投票日期> ='2015-02-20'的通用日期,以便它可以优化餐厅和日期,然后将DATE(投票日期)应用于记录的实际资格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM