簡體   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