php MySQL 如何查询路径字段内容的值

35 篇文章 4 订阅

需求

字段content 存了一个路径 我们假设为

C:\PerfLogs\a.txt

 我们称之为一个内容

n个字段就对应n个内容

内容内的文本 文本就是a.txt  里面的内容

我们想通过搜索某个值 判断a.txt里面存在不存在这个值 

n个内容内的文本如何搜索出来呢  sql 有没有直接的方法呢

貌似没有 或者说只是我还不知道....

 

鱼似乎 我就想起来另一种解决方案 先遍历本地所有数据 存到一个文件上 然后查这个文件

遍历本地所有数据 存到一个文件上 这一步骤不是每次都要写的

 $file = "static/file/text/search_cache_text.txt";
    if (!file_exists($file)) {
        read_all($_SERVER['DOCUMENT_ROOT'] . '/static/file/text/2018', $allContent);
        if (!file_put_contents($file, $allContent)) {
            die("文件写入失败");
        }
    } else {
        $allContent = file_get_contents($file);
        $res = explode("#end#\n", $allContent);

        foreach ($res as $value) {
            if (strstr($value, $search)) {
                $dataA = explode('#splite#', $value);
                $currentData = $dataA[0];
                $needStr .= " `pay_dir` LIKE '%" . $currentData . "' OR";
            }
        }

        if (empty($needStr)) {
            recordSearchEmpty($login, $user, $search);
        } else {
            $needStr = substr($needStr, 0, -2) . " AND ";
        }

    }
//读取该目录下所有内容
function read_all($dir, &$allContent)
{
    if (!is_dir($dir)) return false;
    $handle = opendir($dir);

    if ($handle) {
        while (($fl = readdir($handle)) !== false) {
            $temp = $dir . DIRECTORY_SEPARATOR . $fl;
            //如果不加  $fl!='.' && $fl != '..'  则会造成把$dir的父级目录也读取出来
            if (is_dir($temp) && $fl != '.' && $fl != '..') {
                read_all($temp, $allContent);
            } else {
                if ($fl != '.' && $fl != '..') {
                    $date = explode('\\', $temp);
                    $allContent .= $date[count($date) - 1] . "#splite#" . file_get_contents($temp) . "#end#\n";

                }
            }
        }
    }
}

这样 我们只需要在sql 前面拼接这个 needStr 就阔以了 是不是聪明的一笔

大文件放在数据库有点少钱

放在本地有点不好查询 所以出此下策 以供参考

插入或者删除这些数据的时候可以加上

            $cachefile = "static/file/text/search_cache_text.txt";
            if (file_exists($cachefile)) {
                unlink($cachefile);
            }

以便于下次生成

或者插入 再put一次内容 删除 找指定的字段删掉 

其实sql核心就是增删改查 所以 做什么步骤都要考虑这一点~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值