PHP preg_split поиск пропускает первое слово

Я использую preg_split, чтобы найти некоторые результаты, и он отлично работает, за исключением (как ни странно) первого слова.

Например, если есть элемент под названием "синий телефон" и я ищу "случайный телефон", я ничего не получаю, однако, если я ищу "случайный телефон" (или "что-то ph", "что-то случайный телефон" и т. Д.), То это находит "телефон синий".

Я искал различные выражения и пробовал их (например, @[\W]+@, /[\s,]+/ и т. Д.). Но ничего не помогает. Я могу только предположить, что первая попытка найти предмет (с полной строкой) - это все испортить, но понятия не имею, как. Совершенно новый для этого! Спасибо за любую помощь

РЕДАКТИРОВАТЬ: забыл отметить, что просто поиск "телефон" также не работает.

function find_by_location_or_name($where) {

    // first try complete
    $this->db->where('items_location', $where);
    $this->db->or_like('items_name', $where);
    $query = $this->db->from('items_table')->get();

    // if nothing, break it up, try again
    if( !$query->num_rows) {
        $where_like = preg_split('/ /',  $where);

        $tryagain = false;

        foreach($where_like as $like) {
            if(! $tryagain) {
                $this->db->like('items_location', $like);
            } else {
                $this->db->or_like('items_name', $like);
            }
            $tryagain = true;
        }

        // Do the query
        $query = $this->db->from('items_table')->get();
}

ОБНОВЛЕНИЕ: Спасибо за помощь всем! В итоге это сработало:

// first try complete
$this->db->where('items_location', $where);
$this->db->or_where('items_name', $where);
$query = $this->db->from('items_table')->get();

// if nothing, break it up, try again
if( !$query->num_rows) {
    $where_like = preg_split('/ /',  $where);

    $tryagain = false;

    foreach($where_like as $like) {
        if(! $tryagain) {
            $this->db->like('items_location', $like);
            $this->db->or_like('items_name', $like);
        } else {
            $this->db->like('items_name', $like);
        }
        $tryagain = true;
    }

1 ответ

Я посмотрел на ваш код. Вместо preg_split вы должны сделать полнотекстовый индекс и передать всю строку MySQL. Пусть MySQL найдет его для вас. Это именно то, что вам нужно.

Пожалуйста, посмотрите на: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Эта ссылка более понятна с примерами: http://www.bakale.com/mysql/myfultext.htm

Другие вопросы по тегам