這個問題可能已經問了很多次,所以,請原諒我的重複,但我似乎無法找到像這樣的東西,也不能設法建立類似於我的東西想要實現。MySQL加入SUM
例如,可以說,我有以下表結構:
//tasks
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | P | None | AI |
| user | int(11) | NO | | None | |
| data | varchar(200) | NO | | None | |
+-------+--------------+------+-----+---------+-------+
//votes
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | NO | P | | AI |
| user | int(11) | NO | | | |
| item | int(11) | NO | | | |
| up | tinyint(1) | NO | | 0 | |
| down | tinyint(1) | NO | | 0 | |
+-------+--------------+------+-----+---------+-------+
數據如下:
//tasks
+----+------+------------+
| id | user | data |
+----+------+------------+
| 1 | 1 | something |
| 2 | 2 | lorem ip |
| 3 | 1 | biggy |
+----+------+------------+
//votes
+----+------+------+----+------+
| id | user | item | up | down |
+----+------+------+----+------+
| 1 | 8 | 1 | 1 | 0 |
| 2 | 4 | 1 | 1 | 0 |
| 3 | 2 | 1 | 0 | 1 |
| 4 | 2 | 2 | 1 | 0 |
| 5 | 1 | 2 | 1 | 0 |
+----+------+------+----+------+
我想要做類似的東西:
SELECT r.* FROM `tasks` WHERE `user` = '1' r
LEFT JOIN (SELECT SUM(t.up) AS up,
SUM(t.down) AS down
FROM `votes` t
WHERE t.item = r.id) r ON r.id = t.item
是的,這是我的查詢到目前爲止,但它不起作用,我不知道如何糾正。
基本上,我想:
- 選擇一切從表任務其中
user
爲 「x」 - 從任務加入每一行(在步驟1中選擇)與總和的
up
,總和down
來自表票其中item
等於id
從任務
這應該產生類似的信息(即。 user
= 1):
+----+------+------------+----+------+
| id | user | data | up | down |
+----+------+------------+----+------+
| 1 | 1 | something | 3 | 1 |
| 3 | 1 | biggy | 0 | 0 |
+----+------+------------+----+------+
好了,我希望你們瞭解並能幫助我。
在此先感謝!
事實上這是行不通的,這裏的錯誤:`#1054 - 未知列「,其中clause'`,看起來像線'其中T 'r.id'。 item = r.id`。據我的理解,這是在JOIN之後設置`r`的問題......如果我錯了,請糾正我,只是試圖從所有這些中學習。 – jolt 2010-11-25 18:31:00
@Tom:你的猜測是正確的。試試我的第二個版本。 – jwueller 2010-11-25 18:40:26