背景资料
系统
操作系统:
bash$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 6.0.5 (squeeze)
Release: 6.0.5
Codename: squeeze
MySQL:
bash$ mysql --version
mysql Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1
数据库
引擎:MyISAM
表:post_votes
mysql> describe post_votes;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_uuid | binary(16) | YES | | NULL | |
| user_uuid | binary(16) | YES | | NULL | |
| vote | tinyint(4) | YES | | 0 | |
+-----------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
表:帖子
mysql> describe posts;
+-------------+---------------------+------+-----+----------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+----------------------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| post_uuid | binary(16) | YES | UNI | NULL | |
| owner_uuid | binary(16) | YES | | NULL | |
| created | int(10) unsigned | YES | | NULL | |
| edited | int(10) unsigned | YES | | NULL | |
| title | varchar(50) | YES | | NULL | |
| description | varchar(150) | YES | | NULL | |
| link | varchar(100) | YES | | NULL | |
| properties | varchar(20) | YES | | 00000000000000000000 | |
+-------------+---------------------+------+-----+----------------------+----------------+
9 rows in set (0.00 sec)
问题
我想根据他们的赞成/反对比率来选择帖子。我想出了一个计算赞成票和反对票但似乎无法将其加入实际帖子的查询。
工作(不完整)查询
(
SELECT COUNT(*), post_uuid, 'upvotes' AS 'mode'
FROM post_votes a
WHERE a.vote = 1
GROUP BY post_uuid
)
UNION
(
SELECT COUNT(*), post_uuid, 'downvotes' AS 'mode'
FROM post_votes a
WHERE a.vote = -1
GROUP BY post_uuid
)
损坏的查询
(
(
SELECT COUNT(*), post_uuid, 'upvotes' AS 'mode'
FROM post_votes a
WHERE a.vote = 1
GROUP BY post_uuid
)
UNION
(
SELECT COUNT(*), post_uuid, 'downvotes' AS 'mode'
FROM post_votes a
WHERE a.vote = -1
GROUP BY post_uuid
)
)
a
LEFT JOIN posts b ON a.post_uuid = b.post_uuid
我究竟做错了什么?我得到的错误信息是:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'UNION
(
SELECT COUNT(*), post_uuid, 'downvotes' AS 'mode'