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の2つのリンクではなく、最初のリンクのみを取得します。両方のリンクまたはユーザーが1つの行に入力した任意の数のリンクを取得するにはどうすればよいですか。

単語とリンクにはVARCHARタイプがあり、頻度にはINTタイプがあります。

4

1 に答える 1

1

複数の行を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

一方、同じテーブルにすべてのリンクを配置し、それがドメインリンクかサブリンクかを判断するための追加のフィールドを用意する方がよい場合があります。あなたのシステムについてもっと知らなければ、言うのは難しいです。

于 2013-03-26T20:46:38.303 に答える