我会以蛮力的方式做到这一点,但我想知道是否有更优雅/更有效的解决方案:
拿个简单的桌子,人们:
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
答案 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'