Fiddle Example 1合并两个结果集为一个在MySQL
谁能告诉我,如果有可能为以下两个结果集,以不使用两个单独的查询组合成一个?
PRODUCT_PAGE_ID PRODUCT_PAGE_NAME SIMILAR_PRODUCT SIMILAR_PRODUCT_ID RESULT
22 Nokia 8234 E821 777 2
22 Nokia 8234 HTC 2811 444 2
PRODUCT_PAGE_ID PRODUCT_PAGE_NAME VOTER_NAME COMMENT
22 Nokia 8234 John blahblahblah
22 Nokia 8234 David xxxxxxxxxxxx
22 Nokia 8234 Peter yyyyyyyyyyyy
22 Nokia 8234 John zzzzzzzzzzzz
我预期的结果应该是:
PRODUCT_PAGE_ID PRODUCT_PAGE_NAME SIMILAR_PRODUCT SIMILAR_PRODUCT_ID RESULT VOTER_NAME COMMENT
22 Nokia 8234 E821 777 2 NULL NULL
22 Nokia 8234 HTC 2811 444 2 NULL NULL
22 Nokia 8234 NULL NULL NULL John blahblahblah
22 Nokia 8234 NULL NULL NULL David xxxxxxxxxxxx
22 Nokia 8234 NULL NULL NULL Peter yyyyyyyyyyyy
22 Nokia 8234 NULL NULL NULL John zzzzzzzzzzzz
第一个结果集使用此查询,
SELECT p.product_page_id,p.name AS product_page,
p2.name AS similar_product,
p2.product_page_id AS similar_product_id,COUNT(poll.choice) AS result
FROM poll
INNER JOIN product p ON poll.product_page_id = p.product_page_id
INNER JOIN product p2 ON poll.choice = p2.product_page_id
WHERE poll.product_page_id = 22
GROUP BY poll.choice
ORDER BY result DESC
,而第二个使用
SELECT pc.product_page_id,p.name AS product_page_name,
u.name AS voter_name,pc.comment
FROM `poll_comment` pc INNER JOIN `user` u
ON u.user_id = pc.user_id
INNER JOIN `product` p ON pc.product_page_id = p.product_page_id
WHERE pc.product_page_id = 22
LIMIT 10;
我有一个民意调查,允许用户投票支持y建议的产品与他们浏览的产品相似。他们被允许一次投多个项目并留下评论。每个投票项目使用插入到表poll
的单个行。我试图在一个查询中拉出投票数以及选民的10条评论。问题是我所提出的查询无法获得正确的投票数量或对产品的评论。
表模式:
CREATE TABLE poll
(`user_id` int,`product_page_id`int,`choice` int)
;
INSERT INTO poll
(`user_id`,`product_page_id`,`choice`)
VALUES
(1,22,444),
(1,22,777),
(2,22,444),
(3,22,777)
;
CREATE TABLE poll_comment
(`user_id` int,`product_page_id`int,`comment` varchar(40))
;
INSERT INTO poll_comment
(`user_id`,`product_page_id`,`comment`)
VALUES
(1,22,'blahblahblah'),
(2,22,'xxxxxxxxxxxx'),
(3,22,'yyyyyyyyyyyy'),
(1,33,'zzzzzzzzzzzz'),
(2,33,'kkkkkkkkkkkk')
;
CREATE TABLE user
(`user_id` int, `name` varchar(30))
;
INSERT INTO user
(`user_id`, `name`)
VALUES
(1,'John'),
(2,'David'),
(3,'Peter'),
(4,'May')
;
CREATE TABLE product
(`product_page_id` int, `name` varchar(30))
;
INSERT INTO product
(`product_page_id`, `name`)
VALUES
(1,'Sony A821'),
(22,'Nokia 8234'),
(444,'HTC 2811'),
(777,'E821')
;
这是我尝试(Fiddle):
SELECT * FROM (
SELECT p.name AS product_page,poll.product_page_id,p2.name AS similar_product,
COUNT(poll.choice) As vote_result
FROM `poll`
INNER JOIN product p ON poll.product_page_id = p.product_page_id
INNER JOIN `product` p2 ON poll.choice = p2.product_page_id
GROUP BY poll.choice
ORDER By vote_result desc
)TAB1
JOIN
(
SELECT pc.comment,pc.product_page_id,u.name
FROM `poll_comment` pc
INNER JOIN `product` p ON pc.product_page_id = p.product_page_id
INNER JOIN `user` u ON u.user_id = pc.user_id
LIMIT 10
)TAB2
ON TAB1.product_page_id = TAB2.product_page_id
WHERE TAB1.product_page_id = 22
也许您在寻找'UNION'? - http://dev.mysql.com/doc/refman/5.0/en/union.html – LcSalazar 2014-10-09 15:03:21