MySQL:来自字符串拆分的动态 "IN"子句

标签 mysql dynamic split explode

我有一个表“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

关于MySQL:来自字符串拆分的动态 "IN"子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809101/

相关文章:

c# - 在 C# 上从 object[] 转换为 double[]

python - 基于正则表达式拆分字符串

string - 如何在PowerShell中的两个字符之间获取变量?

php - Yii2 与关系 + 加入 2 个表

java - Swing 中的瘦客户端与 MySql 直接之间的安全问题

mysql获取订单号

WPF Canvas,如何使用后面的MVVM代码动态添加子项

c# - 如何使用 C# 在 UWP 中制作 ItemsWrapGrid?

javascript - 在JavaScript中的字符处拆分字符串

php - 使用 Lithium 和 MySQL 进行 CRUD