[英]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)
我能想到的可能是您遇到的一些問題...
僅僅因為有人看過餐廳,是否就意味着他們實際上投票了??? 如果投票的話,蘋果或android僅有的兩個設備是嗎? 如果從瀏覽器查看並且它們位於基於Windows計算機的瀏覽器上怎么辦?
日期平等。 在餐廳視圖表中,日期字段始終為時間= 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.