|
|
|
| Делаю сайт и в нем самое главное это поиск , нужно его сделать как можно более точным,
варианты с яндекс и гугл поиском пока отпадают пока что.
думаю сделать так , пришел запрос через POST и превращаем в переменную
$poisk = $_POST['poisk'];
|
Далее так как люди могут неправильно набрать слово, думаю лучше обрезать название до 5-6 букв если название превышает допустимую длину.
if (strlen ($poisk) >= 6)
{
$poisk = substr("$poisk" ,1,6);
}
else {
}
|
а теперь самое главное это запрос в базу данных , как его реализовать ?? чтобы он начинал поиск по базе с первых букв и до 5-6 букве названия . | |
|
|
|
|
|
|
|
для: kvins
(05.11.2011 в 21:11)
| | 5-6 букв от начала записи в ячейке? Как вариант, можно воспользоваться регулярными выражениями
SELECT * FROM tbl
WHERE fld REGEXP '^$poisk'
|
| |
|
|
|
|
|
|
|
для: cheops
(05.11.2011 в 21:41)
| | если именно такой код вставить и попробовать , то он у меня фильм находит по 1 вставленой букве =))))
например вбиваю щ и находит мне фильм щелкунчик и крысиный кароль
да от начала , тем более названия фильмов по которым будет идти запрос , не превышает обычно 50 букв , не считая названия типо властелин колец и братство кольца итд, ну это редкость | |
|
|
|
|
|
|
|
для: kvins
(05.11.2011 в 22:00)
| | все я понял что вы имели ввиду =) | |
|
|
|
|
|
|
|
для: kvins
(05.11.2011 в 21:11)
| | нужно его сделать как можно более точным
и
Далее так как люди могут неправильно набрать слово
давайте вы начнете с того что определитесь все-таки или или
и лучше не делать из пользователей "коня педального" особенно из тех кто не ошибается в запросе...
____
расскажите лучше что именно вы ищите? в чем заключается суть запроса
и знаком ли вам термин "полнотекстовый поиск"?
может это именно то что вам нужно? | |
|
|
|
|
|
|
|
для: Valick
(05.11.2011 в 21:44)
| | нужно находить в полях базы данных название фильмов , каждое название в своем поле в базе данных
к примеру нужно найти такие фильмы
гарри поттер
халк
Живая сталь
ну вот и все , а как лучше искать с базы данных не знаю ,
к примеру если человек ошибется и сделает такой запрос
гари поттер а в базе данных такое название гарри поттер
т.е просто не дописал букву г или к примеру т | |
|
|
|
|
|
|
|
для: kvins
(05.11.2011 в 21:58)
| | решил попробовать разные способы, прочитал про locate
и взял код с интернета как основу , но у меня выдает ошибку , что я написал не так ??
$load = "select * form movie where (locate(lower('$poisk'),lower(name))>2)"; | |
|
|
|
|
|
|
|
для: kvins
(05.11.2011 в 22:08)
| |
<?php
$load = "SELECT * FROM movie
WHERE MATCH (name, description) AGAINST ('$poisk')";
?>
|
lower('$poisk'),lower(name)
В бд регистер не имеет значение | |
|
|
|
|
|
|
|
для: Jovidon
(06.11.2011 в 19:01)
| | >lower('$poisk'),lower(name)
>В бд регистер не имеет значение
а вот это не факт ) | |
|
|
|
|
|
|
|
для: KPETuH
(06.11.2011 в 19:45)
| | я чайник и очень вас уважаю
но в книге "Самоучитель MySQL 5" в глава 3 ст. 47 написанно
Для ввода ключевых слов можно использовать любой регистр символов. Так преведенные в листинге 3.2 запросы абсолютно идентичны.
// листинг 3.2
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
|
| |
|
|
|
|
|
|
|
для: Jovidon
(06.11.2011 в 20:22)
| | Для ключевых слов возможно ), но не в БД ), по умолчанию в MySQL от регистра данные не зависят, но есть такой параметр у поля в БД COLLATION которое позволяет заставить данные в поле в таблице зависеть от регистра.
Ну и второе, зачем бы тогда в MySQL была функция lower если бы от регистра никогда ничего не зависит ) | |
|
|
|
|
|
|
|
для: KPETuH
(06.11.2011 в 20:45)
| | Спасибо тепер точно не забуду ) | |
|
|
|