【问题标题】:Search a LONGTEXT field, and display results搜索 LONGTEXT 字段并显示结果
【发布时间】:2014-03-09 08:58:22
【问题描述】:

好的,如此简短而甜蜜。 我的数据库中有一个字段是 LONGTEXT。该字段通常包含大约 2,000 行文本。

我需要它做的是通过这个 LONGTEXT 字段并取出包含输入内容的行。 (对不起,我在解释事情方面很糟糕)

例如,我最初使用 .txt 文件,但我认为 MySQL 是一种更简单的方法,因为我确实有一点经验。我有这个代码。

function searchcode($search)
{
  $count = '0';
  $lines = file('file.txt');
  foreach($lines as $line)
  {
    if(strpos($line, $search) !== false)
    {
      echo "<tr><td>" . $line . "</td></tr>";
      $count++;
    }
  }
  echo "<tr><td style='border-top: 2px solid #000;'>$search was taken a total of $count times.</td></tr>";
}


CODE FOR SEARCHING FOR: searchcode("Camera");

这将查看我想要的 .txt 文件,并根据 $search 的内容显示行。我想要这个,但使用 MySQL。

在此示例中,我正在搜索相机。它会浏览 .txt 文件,然后会显示带有单词 camera 的每一行。 (很明显,它的数量。)

让这个水晶般清晰:我正在寻找一些东西来搜索长文本字段。然后根据某个词显示结果。

我已经知道 LIKE 语法,但我不知道如何使用它!

我想要的示例

[-数据库-]

ID---------日期---------信息

1 ---------3-4-2012----相机已被移除。夹克已被移除。已添加相机。

[-MySQL 页面-]

这里是 MySQL 代码

[-网页-]

相机已被移除。

已添加相机。

【问题讨论】:

    标签: php mysql search text statements


    【解决方案1】:

    您需要做的第一件事是确保您在服务器上安装并配置了mysql-server、mysql-client、php-mysql和php-mysqli,我还建议使用PhpMyAdmin进行友好的mysql管理.

    创建实际表:

    CREATE TABLE code (
       id int(11) not null auto_increment,
       file longtext,
       primary key(id)
    )
    

    接下来是选择mysql访问方式,可以选择mysqli or pdo

    以下示例将向您展示如何使用 mysqli 进行操作:

    class db{
        function query($query, $show_error=true)
        {
            $time_before = $this->get_real_time();
    
            if(!$this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
    
            if(!($this->query_id = mysqli_query($this->db_id, $query) )) {
    
                $this->mysql_error = mysqli_error($this->db_id);
                $this->mysql_error_num = mysqli_errno($this->db_id);
    
                if($show_error) {
                    $this->display_error($this->mysql_error, $this->mysql_error_num, $query);
                }
            }
    
            $this->MySQL_time_taken += $this->get_real_time() - $time_before;
    
            $this->query_num ++;
    
            return $this->query_id;
        }
    
    function get_array($query_id = '')
    {
        if ($query_id == '') $query_id = $this->query_id;
    
        return mysqli_fetch_array($query_id);
    }
    
        function display_error($error, $error_num, $query = '')
        {
            if($query) {
                // Safify query
                $query = preg_replace("/([0-9a-f]){32}/", "********************************", $query); // Hides all hashes
                $query_str = "$query";
            }
    
            echo '<?xml version="1.0" encoding="iso-8859-1"?>
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
            <title>MySQL Fatal Error</title>
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
            <style type="text/css">
            <!--
            body {
                font-family: Verdana, Arial, Helvetica, sans-serif;
                font-size: 10px;
                font-style: normal;
                color: #000000;
            }
            -->
            </style>
            </head>
            <body>
                <font size="4">MySQL Error!</font> 
                <br />------------------------<br />
                <br />
    
                <u>The Error returned was:</u> 
                <br />
                    <strong>'.$error.'</strong>
    
                <br /><br />
                </strong><u>Error Number:</u> 
                <br />
                    <strong>'.$error_num.'</strong>
                <br />
                    <br />
    
                <textarea name="" rows="10" cols="52" wrap="virtual">'.$query_str.'</textarea><br />
    
            </body>
            </html>';
    
            exit();
        }
    }
    
    define ("DBHOST", "localhost");
    define ("DBNAME", "DBNAME");
    define ("DBUSER", "DBUSER");
    define ("DBPASS", "PASS");
    define ("PREFIX", "PREFIX");
    define ("USERPREFIX", "USERPREFIX");
    define ("COLLATE", "utf8");
    
    $db = new db;
    

    现在你可以访问mysql了

    插入一些数据:

    $db->query("INSERT INTO code (code) VALUES('{$text}')");
    

    从代码中选择:

      $row=$db->query("SELECT * FROM code WHERE file LIKE '%{$search}%'");
      while($row=$db->get_array()){
         /* your original code */
         foreach($row['text'] as $line){
           if(strpos($line, $search) !== false){
             echo "<tr><td>" . $line . "</td></tr>";
             $count++;
           }
         }
      }
    

    【讨论】:

    • 我想我应该提一下,我以前从未使用过mysqli,所以我什么都不懂……嗯,我明白了一点,但是,有些只是没有意义我。
    【解决方案2】:

    使用此查询。

    SELECT ROUND((LENGTH(`column_name`) - LENGTH(REPLACE(`column_name`, 'search_keyword', '')))/LENGTH('search_keyword')) FROM table
    

    例如,如果表格有“详细信息”列

    id          details
    1           this is one of the best product in the india
    

    如果我们想在“详细信息”列中匹配并查找文本“the”的计数,则使用此查询

    SELECT ROUND((LENGTH(`details`) - LENGTH(REPLACE(`details`, 'the', '')))/LENGTH('the')) as count FROM table 
    

    输出:

    count = 3
    

    【讨论】:

    • 你能详细说明一下吗?所有这一切似乎有点……对我来说很奇怪。
    • 所以,这似乎只是在计算一些东西,我不想计算一些东西。我正在寻找读取我的 LONGTEXT 字段的每一行,然后搜索一个特定的单词,并且将输出包含该单词的每一行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2015-09-09
    • 2017-12-22
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多