作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在这个问题上呆了一天了。从PHP+MYSQL角度。但由于数据量太大,我尝试过的大多数脚本都超时了。
所以我们有两个表:
消息有自己的格式,名称被放入 []
标签中,如下所示:[Jenna]
。
遗憾的是,并非文本中的所有条目都具有正确的格式。不过,我在人物中确实有很多名字。因此,我想解析 Texts->message 并查看是否有来自 People 的 names 匹配。当然,我不想匹配 [Somename]
,因为它已经被标记了。
最终,目标是执行 UPDATE
查询,以便新匹配的消息将使用 []
标记正确格式化。我不知道这是否可以在同一个 SQL 查询中实现?!
这是一个正则表达式示例,关于我想要检测的内容以及对 preg_match_all()
内部发生的情况的解释:https://regex101.com/r/cQ6gK5/1
这是我尝试过的,因为高级 MySQL 不是我的强项:
<?
function GetPeople () {
global $DB;
$results = $DB->query("SELECT `name` FROM People");
while ($result = $DB->fetch_array($results)) {
$return[] = $result['name'];
}
return implode('|', $return);
}
$people = GetPeople();
echo '<table><tr><th>Message raw</th><th>Matches</th>';
$results = $DB->query("SELECT `message` FROM Texts WHERE `message` NOT REGEXP '\[(.+?)\]'");
while ($result = $DB->fetch_array($results)) {
if (preg_match_all('/(?:(?:^|[\s])(' . $people . ')[\s|\n])/i', $result['message'], $matches)) {
echo '<tr><td>' . $result['message'] . '</td><td><pre>'; print_r($matches); echo '</pre></td></tr>';
}
}
echo '</table>';
我已经在 MySQL 中索引了名称和消息,因为我认为这样可以更容易搜索。我想,所有这一切都可以在没有 php 匹配的情况下完成,只需要单独的 SQL 查询。可悲的是,我永远无法独自完成它应有的优化。非常感谢任何帮助,谢谢。
最佳答案
你可以尝试这样的事情:
SELECT texts.message
FROM texts
JOIN people on texts.message LIKE CONCAT('%', people.name, '%');
这将连接两个表,然后根据“人员”表中的“姓名”列执行类似比较。
关于php - 如何从大数据库中的文本中检测特定关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28182171/
我是一名优秀的程序员,十分优秀!