2013-01-02 37 views
1

我有2個表格:投票和用戶。我希望在當天總票數旁顯示新登記用戶總票數(非總數)。SELECT在mysql中的新用戶和返回用戶的總票數

的查詢可以是所有的時間框架,以後我可以添加從 - 到時間框架。

因此,如果我每個日期X有10張選票,我想知道新用戶生成了多少個,以及返回用戶的數量以及多少個新的和返回的投票數(*還包括新的誰沒有' t票)。

票:

id | vote | user_id | created_at 
1 | 30 | 28  | 2012-06-10 
1 | 12 | 15  | 2012-06-10 
1 | 30 | 28  | 2012-06-10 
... 

用戶:

users_ id | created_at 
28  | 2012-06-01 
29  | 2012-06-03 
30  | 2012-06-10 
... 

,我希望得到的結果是這樣的:

Date | total votes | votes for new | votes for returning | total new users | total returning users 

的感謝!

-----當前代碼:

 SELECT 
     DATE(created_at) AS Date, 
     SUM(CASE WHEN `Type` = 'Votes' THEN 1 ELSE 0 END) AS 'Total Votes', 
     SUM(CASE WHEN `Type` = 'Users' THEN 1 ELSE 0 END) AS 'Total Users' 
    FROM 
    (
     SELECT created_at, 'Votes' `Type` FROM votes 
     UNION ALL 
     SELECT created_at, 'Users'  FROM users 
    ) t 
    GROUP by DATE(created_at) 
    ORDER by DATE(created_at) DESC 
+0

joes_nator,你有任何代碼,你已經嘗試..? – MethodMan

+0

@DJKRAZE只是我可以做的選擇,雖然不能有效地連接所有不同的東西 –

+0

@DJKRAZE我必須錯過一些東西......在你發送的頁面上沒有任何東西在mysql上... –

回答

0

我會考慮在幾個查詢打破這件事。如果我理解你的話,這應該是你正在尋找的。

所有選票PR日期:

SELECT created_at AS date, COUNT(*) AS totalvotes FROM votes GROUP BY created_at; 

新用戶的所有選票PR日期

SELECT v.created_at AS date, COUNT(*) AS newuservotes FROM votes v INNER JOIN users u WHERE v.user_id = u.user_id AND v.created_at = u.created_at GROUP BY v.created_at; 

通過老用戶的所有選票PR日期

The two numbers subtracted 

如果你想整個事情在一個查詢中:

SELECT totvotes.date AS date, totvotes.totalvotes AS totalvotes, IFNULL(newvotes.newuservotes, 0) AS newuservotes, totvotes.totalvotes-IFNULL(newvotes.newuservotes, 0) AS olduservotes 
FROM 
(
SELECT created_at AS date, COUNT(*) AS totalvotes FROM votes GROUP BY created_at 
) totvotes 
LEFT JOIN 
(
SELECT v.created_at AS date, COUNT(*) AS newuservotes FROM votes v INNER JOIN users u WHERE v.user_id = u.user_id AND v.created_at = u.created_at GROUP BY v.created_at 
) newvotes ON totvotes.date = newvotes.date 

與 MySQL的測試> SELECT * FROM用戶;

+---------+------------+ 
| user_id | created_at | 
+---------+------------+ 
|  1 | 2012-06-01 | 
|  2 | 2012-06-02 | 
|  3 | 2012-06-03 | 
+---------+------------+ 
3 rows in set (0.00 sec) 

mysql> select * from votes;

+----+------+---------+------------+ 
| id | vote | user_id | created_at | 
+----+------+---------+------------+ 
| 1 | 10 |  1 | 2012-06-01 | 
| 2 | 20 |  1 | 2012-06-10 | 
| 3 | 30 |  2 | 2012-06-02 | 
| 4 | 40 |  2 | 2012-06-10 | 
+----+------+---------+------------+ 
4 rows in set (0.00 sec) 

結果:

+------------+------------+--------------+--------------+ 
| date  | totalvotes | newuservotes | olduservotes | 
+------------+------------+--------------+--------------+ 
| 2012-06-01 |   1 |   1 |   0 | 
| 2012-06-02 |   1 |   1 |   0 | 
| 2012-06-10 |   2 |   0 |   2 | 
+------------+------------+--------------+--------------+ 

同樣的事情也可以用於「不要投票」的用戶等等

我不知道如何熟悉你是在SQL,因此,如果有有任何問題請評論,我會更新答案。

+1

是的,這是一個緩慢的工作日,非常感謝你... –

相關問題