Поиск в поле LONGTEXT и отображение результатов

Ладно, так коротко и мило. В моей базе данных есть поле LONGTEXT. Это поле обычно содержит около 2000 строк текста в каждом из них.

Что мне нужно сделать, так это пройти через это поле 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 и бум, каждая строка со словом камера будет отображаться. (И счет этого, очевидно.)

ДАВАЙТЕ СДЕЛАЕМ ЭТО КРИСТАЛЬНО ЯСНЫМ: я ищу что-нибудь для поиска в поле длинного текста. Затем отобразите результаты на основе определенного слова.

Я уже знаю о синтаксисе LIKE, но понятия не имею, как его использовать!

ПРИМЕР ТО, ЧЕГО Я ХОЧУ

[-База данных-]

ID --------- Дата --------- Информация

1 ---------3-4-2012----камера удалена. Куртка снята. добавлена ​​камера.

[-Страница MySQL-]

Код MySQL здесь

[-Веб-страница-]

Камера удалена.

Добавлена ​​камера.


person ThePsychoMonkey    schedule 09.03.2014    source источник


Ответы (2)


Первое, что вам нужно сделать, это убедиться, что на сервере установлены и настроены 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 или пдо

В следующем примере показано, как это сделать с помощью 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++;
       }
     }
  }
person Orlo    schedule 09.03.2014
comment
Полагаю, я должен упомянуть, что я никогда раньше не использовал mysqli, поэтому я ничего в этом не понимаю... Ну, я немного понимаю, однако некоторые просто не имеют для меня смысла. - person ThePsychoMonkey; 09.03.2014

используйте этот запрос.

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
person Ananth    schedule 09.03.2014
comment
Не могли бы вы немного рассказать об этом? Все это кажется мне немного... странным. - person ThePsychoMonkey; 09.03.2014
comment
Итак, это похоже на то, что я просто что-то подсчитываю, я не собираюсь подсчитывать вещи. Я хочу прочитать каждую строку моего поля LONGTEXT, а затем выполнить поиск определенного слова, и будут выведены все строки, содержащие это слово. - person ThePsychoMonkey; 09.03.2014