我有一个表“wordlist”,每个单词都有一个分数:1 或 -1:
id | name | val
1, 'hello', 1,
2, 'world', -1
3, 'test', 1,
...
我还有一个包含文本的“文本”表:
id | text | score
1, 'hello world', 0
2, 'Lorem Ipsum Dolor Sit Amet...', 0
...
我想用这个规则更新表“texts”中的字段“score”:
score = sum(wordlist.val) 其中句子的每个单词都出现在单词列表中。
我试过这种方法,但它不起作用:
update texts as t set score=(select sum(val) from wordlist where word in (concat('\'', replace(t.text,' ','\',\''),'\'')))
我有超过 500K 行的数据要处理,所以我宁愿只使用 MySQL,而不使用任何 PHP。
如果您有解决方案,请提前致谢!
我希望 MySQL 中有一个 explode() 函数!
您可以像这样使用 FIND_IN_SET():
select
texts.*, sum(val)
from
texts left join wordlist
on find_in_set(wordlist.name, replace(texts.`text`, ' ', ','))>0
group by texts.id
如果你需要更新你的表格,你可以使用这个:
update texts inner join (
select texts.id, sum(val) as score
from texts left join wordlist
on find_in_set(wordlist.name, replace(texts.`text`, ' ', ','))>0
group by texts.id) s
on texts.id=s.id
set texts.score=s.score
我是一名优秀的程序员,十分优秀!