-1

キーワードと投稿の2つのテーブルがあります

キーワード表は次のようになります

       keyword    weight
         1         0.3
         2         0.5 
         3         0.4 

例えば

とポストテーブル

         post
       i am beautiful
       1, 2, 3
       1 + 3 = 4

ポストテーブルから重量を合計したい場合

つまり

私は結果を取得したい

     post     total 
    1, 2, 3     1.2
    1 + 3 = 4   0.7

このような

join 句を使用する必要がありますか??

 create procedure RankingPost8
 (@concept_name nvarchar(50))
 AS
 declare @k1 nvarchar(200) 
 select @k1 = keyword from keyword where concept_id = 
 (select Concept_ID from concept where @concept_name = Concept_name) 
 Select @K1 = coalesce(@k1 +' ','') + keyword  from keyword
 begin
 select id as Post_ID, post as Txt from Post 
  where freetext (post, @k1) 

 end 
4

2 に答える 2

0

考えられる解決策の 1 つは、カーソルを使用することです。

次のようなことを試してください:

UPDATE POST 
SET    TOTAL = 0 

DECLARE @keyword INT, 
        @weight  NUMERIC(4, 2) 
DECLARE CURS CURSOR FAST_FORWARD READ_ONLY FOR 
  SELECT * 
  FROM   KEYWORD 

OPEN CURS 

FETCH NEXT FROM CURS INTO @keyword, @weight 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      UPDATE POST 
      SET    TOTAL = TOTAL + @weight 
      WHERE  CHARINDEX(CAST(@keyword AS VARCHAR(4)), POST) > 0 

      FETCH NEXT FROM CURS INTO @keyword, @weight 
  END 

CLOSE CURS 

DEALLOCATE CURS 

SELECT POST, 
       TOTAL 
FROM   POST 
WHERE  TOTAL > 0 

実際の例はSQL Fiddleにあります。

この例では、最終的な値を保持する列を Post テーブルに追加しました。元のテーブルを変更せずに、別のテーブルまたは出力だけに表示したい場合は、お知らせください。

于 2013-10-08T06:28:22.770 に答える
0

このようなことを試してみませんか?

SELECT post, sum(weight)
FROM Post
INNER JOIN Keyword ON post LIKE '%'+ Convert(varchar,keyword) + '%'
GROUP BY post

SQL Fiddleで試してみてください。

パラメータの where 条件を追加することはあなたに任せます:)

気に入っていただければ幸いです。

于 2013-10-08T09:46:05.840 に答える