Как я могу искать разделенные запятыми значения в базе данных, используя codeigniter - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь отфильтровать базу данных по столбцу категории, поэтому я ищу категорию и возвращаю правильные элементы. Однако некоторые элементы имеют более одной категории, поэтому я использовал значения, разделенные запятыми, чтобы поместить две или более категории в один столбец. Я попробовал этот метод:

   public function get_cat_article($value)
    {
        $table = $this->get_table();
        $this->db->where('cat', $value);
        return $this->db->get($table);
    }

, но он выбирает только первое из разделенных значений. Я попытался использовать 'where_in', но это также подняло только первое значение. Я пытался «как», и это сработало, но не было окончательным. Поиск по «WS» включал другие категории, такие как «IWS». Я гуглил решение, и мне предложили fin_in_set, поэтому я попытался:

public function get_cat_article($value)
    {
        $table = $this->get_table();
        $this->db->where('find_in_set('.$value.',cat)');
        return $this->db->get($table);
    }

Но это не сработало вообще. Я неправильно понял синтаксис или это неправильный подход?

Ответы [ 3 ]

0 голосов
/ 29 апреля 2020

Попробуйте подобный метод, но так:

public function get_cat_article($value)
{
    $table = $this->get_table();

    $this->db->like('cat', $value . ',', 'after');
    $this->db->or_like('cat', ',' . $value . ',');
    $this->db->or_like('cat', ',' . $value, 'before');
    return $this->db->get($table);
}
0 голосов
/ 29 апреля 2020

Похоже, что проблема решена с помощью следующей строки кода, используя метод MySql 'find_in_set'. Я получил код с этого сайта по адресу Проверьте условия в значениях, разделенных запятыми , и ключевая строка:

$this->db->where("FIND_IN_SET( '$post_period' , period) ");

Я только что неправильно понял синтаксис.

0 голосов
/ 28 апреля 2020

Вы пробовали как запрос? В краткой демонстрации это работает для меня.

public function get_cat_article($value)
{
    $table = $this->get_table();

    $this->db->like('cat', $value);  // say, $value = 'reebok'
    return $this->db->get($table);

    // Produces: SELECT * FROM $table WHERE `cat` LIKE '%reebok%' ESCAPE '!'
}

Для получения более подробной информации читайте официальное руководство пользователя CodeIgniter здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...