[英]Mysql — 2 counts in one query, bad second count result
我剛剛繼承了一個代碼庫,並且現有的查詢不正確。 它看起來像(這里的通用表和列):
select p.user_id, p.photo_id, p.date, count(p.photo_id) as 'Photos', count(v.photo_id) as 'Views'
from photos p
LEFT OUTER JOIN userviews v on v.user_id = p.user_id and v.photo_id = p.photo_id
where p.photo_id in ( 1,2,3 [...] )
GROUP BY photo_id, user_id
ORDER BY user_id, photo_id
結果集接近正確,非常接近,沒有人注意到它有一段時間是錯誤的。
如果表2(用戶視圖)中沒有數據,則生成的行是正確的。
但是,如果有數據,結果集將復制表1中的計數值,即:
1082 3381 2012-05-25 08:50:20 3 3 <--WRONG, should be 1
1082 3387 2012-07-26 15:02:36 2 2 <--WRONG, should be 4
1117 3381 2012-05-23 03:46:02 1 0 <--CORRECT
1117 3382 2012-05-23 03:45:54 1 0 <--CORRECT
1117 3383 2012-05-23 03:45:09 1 0 <--CORRECT
現在,如果這是SQL服務器,我只是使用CTE重寫該死的東西,但是Mysql不支持WITH子句,我不認為我可以查詢這些因為它們返回多個值。
那么如何在Mysql中解決這個問題呢? 在此先感謝,我對此感到難過。
試試這個查詢
SELECT p.user_id, p.photo_id, p.Photos, ph.date, v.Views
FROM photos ph,
(SELECT p.user_id, p.photo_id, count(p.photo_id) as 'Photos'
FROM photos p
WHERE p.photo_id in ( 1,2,3 [...] )
GROUP BY p.photo_id, p.user_id ) p,
(SELECT v.user_id, v.photo_id, count(v.photo_id) as 'Views'
FROM userviews v
WHERE v.photo_id in ( 1,2,3 [...] )
GROUP BY v.photo_id, v.user_id
) v
WHERE p.user_id = v.user_id AND
p.photo_id = v.photo_id AND
ph.photo_id = p.photo_id AND
ph.user_id = p.user_id
ORDER BY p.user_id, p.photo_id
編輯使用左連接
SELECT p.user_id, p.photo_id, p.Photos, ph.date, v.Views
FROM (SELECT v.user_id, v.photo_id, count(v.photo_id) as 'Views'
FROM userviews v
WHERE v.photo_id in ( 1,2,3 [...] )
GROUP BY v.photo_id, v.user_id
) v left join (SELECT p.user_id, p.photo_id, count(p.photo_id) as 'Photos'
FROM photos p
WHERE p.photo_id in ( 1,2,3 [...] )
GROUP BY p.photo_id, p.user_id ) p
ON p.user_id = v.user_id AND p.photo_id = v.photo_id
left join photos ph
On ph.photo_id = p.photo_id AND
ph.user_id = p.user_id
ORDER BY p.user_id, p.photo_id
當您沒有GROUP BY或聚合SELECT列表中的所有項時,MySQL會選擇其他列的值,您可能會得到意外的結果。 ( REFER )這就是你得到錯誤結果的原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.