запросить поиск букв к буквам? - PullRequest
0 голосов
/ 17 августа 2011

Я выполняю поиск с предложениями на основе букв, введенных в поле поиска.

Пример:

У меня в базе данных есть такие слова: salam, salavat, sabos, sandal, sefid, siah and ...
Я набрал в окне поиска: s - показать это слова -> salam, salavat, sabos, sandal, sefid, siah
Теперь, если набрал: sa - отобразить эти слова -> salam, salavat, sabos, sandal,
При вводе: sala - отобразить эти слова -> salam, salavat
Если набрано: salam - показать это слово -> salam

Я использую событие jQuery .keyup() (keyup работает нормально) и использую codeigniter в бэкэнде (запрос в codeigniter не тот, который я хочу).

См. Мой запрос (В этом запросе $find содержит уже набранную последовательность, и я использую like Ключевое слово для поиска в базе данных):

$find = $this->input->post('find');
    $where  =   "date LIKE '$find' OR
            name LIKE '$find' OR 
            star LIKE '$find' OR
            address LIKE '$find' OR
            number_phone LIKE '$find' OR 
            type LIKE '$find' OR
            service LIKE '$find' OR
            units LIKE '$find' OR
            useradmin LIKE '$find'";

$query = $data['results'] = $this->db->query("SELECT @rownum:=@rownum+1 rownum, t.*
        FROM (
        SELECT *
        FROM my_table
        WHERE 
            $where
        ORDER BY id desc
        LIMIT $offset, $coun_page       
        ) t,
        (SELECT @rownum:=0) r");

Следующий запрос работает, но я не могу его использовать из-за rownum:

$this->db->order_by("id", "desc")->like('name', $name)->get('my_table')

Как получить предложения с rownum?

1 Ответ

5 голосов
/ 17 августа 2011

Для сопоставления подстроки с запросом LIKE необходимо использовать подстановочный знак, который в SQL является символом процента %.

например.

WHERE foo LIKE '%bar%' найдет все строки, в которых столбец foo содержит подстроку 'bar'.

WHERE foo LIKE 'bar%' найдет все строки, где столбец foo начинается с подстроки 'bar'.

WHERE foo LIKE '%bar' найдет все строки, где столбец foo заканчивается подстрокой 'bar'.

PS. всегда полезно содержать имена столбцов в обратных тиках, чтобы избежать конфликтов с (потенциально) зарезервированными именами, такими как date и type.

SELECT `column1`, `column2` FROM `table` WHERE `column3` = 'value'
...