Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поиск по первым 5 буквам в mysql
 
 автор: kvins   (05.11.2011 в 21:11)   письмо автору
 
 

Делаю сайт и в нем самое главное это поиск , нужно его сделать как можно более точным,
варианты с яндекс и гугл поиском пока отпадают пока что.

думаю сделать так , пришел запрос через POST и превращаем в переменную

$poisk = $_POST['poisk'];


Далее так как люди могут неправильно набрать слово, думаю лучше обрезать название до 5-6 букв если название превышает допустимую длину.

if (strlen ($poisk) >= 6)
 {
  $poisk = substr("$poisk" ,1,6);
 }
else {

}


а теперь самое главное это запрос в базу данных , как его реализовать ?? чтобы он начинал поиск по базе с первых букв и до 5-6 букве названия .

  Ответить  
 
 автор: cheops   (05.11.2011 в 21:41)   письмо автору
 
   для: kvins   (05.11.2011 в 21:11)
 

5-6 букв от начала записи в ячейке? Как вариант, можно воспользоваться регулярными выражениями
SELECT * FROM tbl
WHERE fld REGEXP '^$poisk'

  Ответить  
 
 автор: kvins   (05.11.2011 в 22:00)   письмо автору
 
   для: cheops   (05.11.2011 в 21:41)
 

если именно такой код вставить и попробовать , то он у меня фильм находит по 1 вставленой букве =))))

например вбиваю щ и находит мне фильм щелкунчик и крысиный кароль

да от начала , тем более названия фильмов по которым будет идти запрос , не превышает обычно 50 букв , не считая названия типо властелин колец и братство кольца итд, ну это редкость

  Ответить  
 
 автор: kvins   (06.11.2011 в 22:17)   письмо автору
 
   для: kvins   (05.11.2011 в 22:00)
 

все я понял что вы имели ввиду =)

  Ответить  
 
 автор: Valick   (05.11.2011 в 21:44)   письмо автору
 
   для: kvins   (05.11.2011 в 21:11)
 

нужно его сделать как можно более точным
и
Далее так как люди могут неправильно набрать слово

давайте вы начнете с того что определитесь все-таки или или
и лучше не делать из пользователей "коня педального" особенно из тех кто не ошибается в запросе...
____
расскажите лучше что именно вы ищите? в чем заключается суть запроса
и знаком ли вам термин "полнотекстовый поиск"?
может это именно то что вам нужно?

  Ответить  
 
 автор: kvins   (05.11.2011 в 21:58)   письмо автору
 
   для: Valick   (05.11.2011 в 21:44)
 

нужно находить в полях базы данных название фильмов , каждое название в своем поле в базе данных

к примеру нужно найти такие фильмы

гарри поттер
халк
Живая сталь


ну вот и все , а как лучше искать с базы данных не знаю ,

к примеру если человек ошибется и сделает такой запрос
гари поттер а в базе данных такое название гарри поттер

т.е просто не дописал букву г или к примеру т

  Ответить  
 
 автор: kvins   (05.11.2011 в 22:08)   письмо автору
 
   для: kvins   (05.11.2011 в 21:58)
 

решил попробовать разные способы, прочитал про locate

и взял код с интернета как основу , но у меня выдает ошибку , что я написал не так ??

$load = "select * form movie where (locate(lower('$poisk'),lower(name))>2)";

  Ответить  
 
 автор: Jovidon   (06.11.2011 в 19:01)   письмо автору
 
   для: kvins   (05.11.2011 в 22:08)
 


<?php
$load 
"SELECT * FROM movie
WHERE MATCH (name, description) AGAINST ('
$poisk')";
?>


lower('$poisk'),lower(name)
В бд регистер не имеет значение

  Ответить  
 
 автор: KPETuH   (06.11.2011 в 19:45)   письмо автору
 
   для: Jovidon   (06.11.2011 в 19:01)
 

>lower('$poisk'),lower(name)
>В бд регистер не имеет значение

а вот это не факт )

  Ответить  
 
 автор: Jovidon   (06.11.2011 в 20:22)   письмо автору
 
   для: 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;

  Ответить  
 
 автор: KPETuH   (06.11.2011 в 20:45)   письмо автору
 
   для: Jovidon   (06.11.2011 в 20:22)
 

Для ключевых слов возможно ), но не в БД ), по умолчанию в MySQL от регистра данные не зависят, но есть такой параметр у поля в БД COLLATION которое позволяет заставить данные в поле в таблице зависеть от регистра.

Ну и второе, зачем бы тогда в MySQL была функция lower если бы от регистра никогда ничего не зависит )

  Ответить  
 
 автор: Jovidon   (06.11.2011 в 21:14)   письмо автору
 
   для: KPETuH   (06.11.2011 в 20:45)
 

Спасибо тепер точно не забуду )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования