2013-10-08 4 views
-1

У меня есть две таблицы ключевых слов и послефункция суммы с присоединиться

таблицы ключевых слов выглядит

 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 

как этот

я должен использовать присоединиться пункт ??

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

Зачем нужна сумма для сообщения '1 + 3 = 4' значение' 0,3', а не 0,7? –

+2

Это сервер sql снова? mysql и sql-сервер - это два разных rdbms. –

+0

oh sorry XD должно быть 0,7 –

ответ

0

Одним из возможных решений было бы использовать курсор.

попробовать что-то вроде этого:

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.

В моем примере я добавил столбец в столбец, содержащий окончательное значение. Если вы хотите его в другой таблице или просто на выходе без изменения исходной таблицы, просто дайте мне знать.

+0

А я забыл сказать, используя функцию Sum(), чтобы получить общий вес .. –

+0

Зачем вам нужно использовать СУММУ() специально? – Gidil

+0

Мое назначение требовало ранжирования хранимой процедуры Возврат таблицы ранжирования включает Post_ID, сообщение и ранжирование У меня есть три таблицы, концепция, ключевые слова и сообщение –

0

Почему бы вам не попробовать что-то подобное?

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

Попробуйте на SQL Fiddle.

Я оставляю вам добавить где условие для параметра :)

Надеюсь, вам понравится.

Смежные вопросы