我打算用蛮力的方式做到这一点,但我想知道是否有更优雅/有效的解决方案:
拿一个简单的表格,人:
RecNum Category Name
1001 A Alice
1002 A Bob
1003 B Charlie
1004 C Doug
1005 A Ernie
还有另一个表 NEWS,它基本上只是一个带有可选内联标记的文本字段:
RecNum NewsText
201 Blah blah {p1003}
202 Blah blah blah
203 Blah {p1005}
204 {p1002} blah blah
205 Blah {p1003} blah
'{p####}'用于内部解析:'p'表示它是PEOPLE表,'####'是PEOPLE记录的RecNum,并且标记被替换为名称...因此,当显示时,NEWS RecNum 201 将显示“Blah blah Charlie”。
我需要做的是,给定 PEOPLE Category 值,找到包含给定类别的所有 PEOPLE 的“{p####}”RecNum 的 NEWS 记录的不同计数。
例如,对于上述 3 个类别,返回结果应为:
Category A: 2 (from NEWS records 203 and 204)
Category B: 1 (need distinct count, even though Charlie (1003) shows up in 2 NEWS records (201 & 205))
Category C: 0 (not found)
我正在尝试使用 Regexp 来执行此操作,但不知道如何告诉它要查找什么(具有给定类别的每条记录的 RecNum)
这可能吗?正则表达式不是执行此操作的方法吗?
感谢任何帮助/指导!
编辑: ...或者获取整个 NEWS 表并在 php 中解析它会更容易吗?
-G
最佳答案
无需正则表达式即可完成此操作。
SELECT count(distinct(people.RecNum)) from people
LEFT JOIN news on news.NewsText like concat('%{p', people.RecNum , '}%')
WHERE news.NewsText like concat('%{p', people.RecNum , '}%')
AND people.Category='A'
关于Mysql,在带有正则表达式的where子句中使用另一个表的字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40646735/