Mysql,使用regexp的where子句中的另一个表的字段值?

时间:2016-11-17 04:28:28

标签: mysql regex

我会以蛮力的方式做到这一点,但我想知道是否有更优雅/更有效的解决方案:

拿个简单的桌子,人们:

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表和&#39 ####'是PEOPLE记录的RecNum,标签被名称替换...因此,当显示时,NEWS RecNum 201将显示' Blah blah Charlie。'

我需要做的是,根据PEOPLE类别值,找到包含' {p ####}'的新闻记录的不同计数。具有给定类别的所有人的RecNums。

例如,对于上述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)

这甚至可能吗? Regexp不是这样做的吗?

任何帮助/指导表示赞赏!

编辑: ...或者只是抓住整个NEWS表并在php中解析它会更容易吗?

-G

1 个答案:

答案 0 :(得分:0)

你可以在没有正则表达的情况下做到这一点。

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'