2013-03-24 94 views
1
Table 1:Domain Link Result 
====================================================================== 
||Column1(words)  ||Column2(links) ||Column3(frequency)  || 
====================================================================== 
    1     1     Any Number 
    2     1     Any Number 
    3     1     Any Number 
    4     1     Any Number 
    1     2     Any Number 
    2     2     Any Number 
    3     2     Any Number 
    4     2     Any Number 


Table 2:Sub Link Result 
====================================================================== 
||Column1(words)  ||Column2(sublinks) ||Column3(frequency) || 
====================================================================== 
    1     a     Any Number 
    2     b     Any Number 
    3     c     Any Number 
    4     d     Any Number 
    1     e     Any Number 
    2     f     Any Number 
    3     g     Any Number 
    4     h     Any Number 

And so on. 

在上述场景中,用户输入了4个单词和2个域链接。现在,4个关键字的频率计算在域链接以及子链接上,并存储在单独的表中,如上所示。我想要一个总的结果如下图所示:如何在单个查询中的单个行中显示单个字段的多个值?

Table 3:Final Result 
================================================================================== 
||Column1(words)  ||Column2(Domain links) ||Column3(Total frequency)  || 
================================================================================== 
Row1: 1    1     Total of frequency in both tables 
         2     for word "1" 
---------------------------------------------------------------------------------- 
Row2: 2    1     Total of frequency in both tables 
         2     for word "2" 
---------------------------------------------------------------------------------- 
Row3: 3    1     Total of frequency in both tables 
         2     for word "3" 
---------------------------------------------------------------------------------- 
Row4: 4    1     Total of frequency in both tables 
         2     for word "4" 
---------------------------------------------------------------------------------- 

我试着在MySQL以下查询:

SELECT t.`keyword`, t.`link` SUM(t.`frequency`) AS total 
FROM (

SELECT `frequency` 
FROM `domain_link_result` 
WHERE `keyword` = 'national' 
UNION ALL 
SELECT `frequency` 
FROM `sub_link_result` 
WHERE `keyword` = 'national' 
)t GROUP BY `keyword` 

但在最终结果的第2栏我得到的,而不是只有第一个链接的两个环节为行1 。我怎样才能得到用户输入的单个链接或任意数量的链接?

字和链接有VARCHAR作为类型和频率有INT类型。

回答

1

如果你想几行折叠成一个,仍然能够看到的信息,你必须使用GROUP_CONCAT

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

这个接口输出逗号分隔折叠的价值观,即:一个字符串。在你的编程语言中,如果你需要单独的值,你可以分割这个字符串。

您的查询看起来莫名其妙地这样

SELECT keyword, GROUP_CONCAT(links), SUM(frequency) 

FROM (subquery) 

GROUP BY keyword 

这将输出类似这样:

================================================================================== 
||Column1(words)  ||Column2(Domain links) ||Column3(Total frequency)  || 
================================================================================== 
Row1: 1    1,2      sum of freq. 
---------------------------------------------------------------------------------- 
Row2: 2    1,2      sum of freq. 
---------------------------------------------------------------------------------- 
Row3: 3    1,2      sum of freq. 
---------------------------------------------------------------------------------- 
Row4: 4    1,2      sum of freq. 

编辑:您所查询的额外的帮助

您的查询看起来有点有点让我困惑。尝试用JOIN方法:

SELECT domain_link_results.word AS word, 
     GROUP_CONCAT(domain_link_results.links) AS domain_links, 
     domain_link_results.frequency + sub_link_results.frequency AS total_frequency 

FROM domain_link_results 

INNER JOIN sub_link_results 
     ON domain_link_results.word = sub_link_results.word 

WHERE domain_link_results.word = "national" 

GROUP BY domain_link_results.word 

在另一方面,它可能是更好的在同一个表中的所有链接,和一个额外的字段,以确定它是否是一个域名链接或子链路。不知道更多关于你的系统,这很难说。

+0

在最终结果的第2列中,我在使用您的方法后获取了Sub Links而不是Domain Links。有没有什么办法可以只从子查询结果中选择域链接? – SilentAssassin 2013-03-27 06:46:28

+0

我更新了答案,检查它是否有帮助。 – bgusach 2013-03-27 07:36:10

+0

“SUM”函数的第二个参数有语法错误。 “SUM”函数可以给出两个这样的参数吗? – SilentAssassin 2013-03-28 06:13:23

相关问题