2014-12-09 222 views
3

我在mySql中有以下表格。sql沒有顯示正確的結果

博客

Field  Type   
---------- ------------ 
id   int(11) 
name  varchar(255) 
user_id  int(11) 
share  int(14) 

user_blog_analytics

Field  Type   
----------- ------------ 
id   int(11) 
blog_id  int(11) 
ip   varchar(255) 
impressions int(11) 
date   date 

user_profile

Field  Type   
----------- ------------ 
id   int(11) 
user_id  int(11) 
description text 
share  int(14) 

個user_profile_analytics

Field  Type   
----------- ------------ 
id   int(11) 
user_id  int(11) 
ip   varchar(255) 
impressions int(11) 
date   date 

用戶

​​

我想要一個查詢,讓我每個用戶的總博客股份從blog表,從user_profile表中每個用戶的總輪廓股,佔總博客的觀點從昨天即從user_blog_analytics表,所有時間觀點從user_profile_analytics表中的配置文件。

我創建了一個查詢,但沒有給我我期望的結果,它只給了我很少的結果。

SELECT a.user_id, COUNT(DISTINCT b.ip) AS blog_view_count, a.share AS blog_share_count, c.share AS profile_share_count, COUNT(DISTINCT d.ip) AS user_profile_view 
FROM blog AS a 
JOIN user_blog_analytics AS b ON b.blog_id=a.id 
JOIN user_profile AS c ON c.user_id=a.user_id 
JOIN user_profile_analytics AS d ON d.user_id=c.user_id 
JOIN users AS e ON e.id=a.user_id 
WHERE DATE_SUB(CURDATE(), INTERVAL 1 DAY) = b.date AND e.role_id=2 
GROUP BY a.id; 

當我運行此查詢它給了我只有一個結果,但是當我手工檢查表那麼就應該給我至少2分的結果。告訴我我錯在哪裏,如何通過修改此查詢來獲得結果。

+0

這很難說沒有數據,但你有幾個聚合件在那裏。你能分享你得到的結果和你期望的結果嗎?這可能是足夠的數據來說明發生了什麼。 – 2014-12-09 11:31:16

+0

那麼用戶可以有多個配置文件?什麼是INT(14)? !?!?! – Strawberry 2014-12-09 11:32:22

回答

1

試試這個:

SELECT u.id, u.email, b.blog_share_count, b.blog_view_count, 
     up.profile_share_count, upa.user_profile_view 
FROM users u 
LEFT JOIN (SELECT b.user_id, SUM(b.share) AS blog_share_count, COUNT(DISTINCT b.ip) AS blog_view_count 
      FROM blog b 
      LEFT JOIN user_blog_analytics AS uba ON uba.blog_id = b.id AND DATE_SUB(CURDATE(), INTERVAL 1 DAY) = uba.date 
      GROUP BY b.user_id 
     ) b ON u.id = b.user_id 
LEFT JOIN (SELECT up.user_id, SUM(up.share) AS profile_share_count 
      FROM user_profile up 
      GROUP BY up.user_id 
     ) up ON u.id = up.user_id 
LEFT JOIN (SELECT up.user_id, COUNT(DISTINCT up.ip) AS user_profile_view 
      FROM user_profile_analytics up 
      GROUP BY up.user_id 
     ) upa ON u.id = upa.user_id 
1

不是一個答案,但值得思考......

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table(i14 INT(14),i4 INT(4)); 

INSERT INTO my_table VALUES (123456789,123456789); 

SELECT * FROM my_table; 
+------------+------------+ 
| i14  | i4   | 
+------------+------------+ 
| 2147483647 | 2147483647 | 
+------------+------------+ 

因此,括號內的數字是不是做多的哦!