2014-10-09 66 views
1

Fiddle Example 1合并两个结果集为一个在MySQL

Fiddle Example 2

谁能告诉我,如果有可能为以下两个结果集,以不使用两个单独的查询组合成一个?

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 
+2

也许您在寻找'UNION'? - http://dev.mysql.com/doc/refman/5.0/en/union.html – LcSalazar 2014-10-09 15:03:21

回答

2

通过使用两个querys结果和工会都试试下面的办法:

select PRODUCT_PAGE_ID,PRODUCT_PAGE_NAME,SIMILAR_PRODUCT,SIMILAR_PRODUCT_ID,RESULT,null as VOTER_NAME , null as COMMENT from query1 
UNION ALL 
select PRODUCT_PAGE_ID,PRODUCT_PAGE_NAME,null as SIMILAR_PRODUCT,null as SIMILAR_PRODUCT_ID,null as RESULT,VOTER_NAME,COMMENT from query2 

精确根据您的数据回答:

select PRODUCT_PAGE_ID,product_page as PRODUCT_PAGE_NAME,SIMILAR_PRODUCT,SIMILAR_PRODUCT_ID,RESULT,null as VOTER_NAME , null as COMMENT from (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)temp 

UNION ALL 

select PRODUCT_PAGE_ID,PRODUCT_PAGE_NAME,null as SIMILAR_PRODUCT,null as SIMILAR_PRODUCT_ID,null as RESULT,VOTER_NAME,COMMENT from (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)TEMP2 
+0

标记为正确的答案,如果它对你有用.. :) – Karunakar 2014-10-09 15:29:55

相关问题