Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для netsolex
53 / 53 / 4
Регистрация: 26.05.2011
Сообщений: 379

Поиск по базе данных

13.07.2012, 17:58. Показов 2138. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Наткнулся на очень простой скрипт поиска по базе данных но потом увидел что сам поиск происходит если только само искаемое слово в точности совпадает с тем что находится в базе данных.. но стоит только изменить в конце добавив пару или одну букву как оно уже не соостветсвует и поик его не находит..

пример: Martin - находится поиском
пример 2 : Martines - уже не выходит поиском

судя по всему по идее Martin/Martines должно искаться поисковиком потому что начальные слоги его соответсвуют...

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

приведу сам скрипт который нашел на сайте about.com

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
 
<body>
<h2>Search</h2> 
 <form name="search" method="post" action="<?=$PHP_SELF?>">
 Seach for: <input type="text" name="find" /> in 
 <Select NAME="field">
 <Option VALUE="fname">First Name</option>
 <Option VALUE="lname">Last Name</option>
 <Option VALUE="info">Profile</option>
 </Select>
 <input type="hidden" name="searching" value="yes" />
 <input type="submit" name="search" value="Search" />
 </form>
<? 
 //This is only displayed if they have submitted the form 
 if ($searching =="yes") 
 { 
 echo "<h2>Results</h2><p>"; 
 
 //If they did not enter a search term we give them an error 
 if ($find == "") 
 { 
 echo "<p>You forgot to enter a search term"; 
 exit; 
 } 
 
 // Otherwise we connect to our Database 
 mysql_connect("localhost", "root", "password") or die(mysql_error()); 
 mysql_select_db("sample_search") or die(mysql_error()); 
 
 // We preform a bit of filtering 
 $find = strtoupper($find); 
 $find = strip_tags($find); 
 $find = trim ($find); 
 
 //Now we search for our search term, in the field the user specified 
 $data = mysql_query("SELECT * FROM users WHERE upper($field) LIKE'%$find%'"); 
 
 //And we display the results 
 while($result = mysql_fetch_array( $data )) 
 { 
 echo $result['fname']; 
 echo " "; 
 echo $result['lname']; 
 echo "<br>"; 
 echo $result['info']; 
 echo "<br>"; 
 echo "<br>"; 
 } 
 
 //This counts the number or results - and if there wasn't any it gives them a little message explaining that 
 $anymatches=mysql_num_rows($data); 
 if ($anymatches == 0) 
 { 
 echo "Sorry, but we can not find an entry to match your query<br><br>"; 
 } 
 
 //And we remind them what they searched for 
 echo "<b>Searched For:</b> " .$find; 
 } 
 ?> 
</body>
</html>
SQL
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE IF NOT EXISTS `users` (
  `fname` VARCHAR(30) COLLATE utf8_spanish_ci DEFAULT NULL,
  `lname` VARCHAR(30) COLLATE utf8_spanish_ci DEFAULT NULL,
  `info` BLOB
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
 
INSERT INTO `users` (`fname`, `lname`, `info`) VALUES
('Jim', 'Jones', 0x496e206869732073706172652074696d65204a696d20656e6a6f79732062696b696e672c20656174696e672070697a7a612c20616e6420636c6173736963616c206d75736963),
('Peggy', 'Smith', 0x506567677920697320612077617465722073706f72747320656e74687573696173742077686f20616c736f20656e6a6f7973206d616b696e6720736f617020616e642073656c6c696e6720636865657365),
('Maggie', 'Martin', 0x4d6167676965206c6f76657320746f20636f6f6b206974616c6c69616e20666f6f6420696e636c7564696e6720737061676574746920616e642070697a7a61),
('Tex', 'Moncom', 0x54657820697320746865206f776e657220616e64206f70657261746f72206f66205468652050697a7a612050616c6163652c2061206c6f63616c2068616e67206f7574206a6f696e74);

всем спасибо за идею и помощь заранее ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2012, 17:58
Ответы с готовыми решениями:

Поиск передаваемой строки в базе данных
Всем привет! Я решил написать свой маленький поисковичек который будет искать информацию в моей БД и выводить список всех совпадений. ...

Поиск веб-страницы в базе данных
Сразу говорю с php мало знаком. Помогите с реализацией системы поиска страницы по базе данных. Когда нажимаешь на ссылку, чтобы он не...

Поиск текста по базе данных
Проверьте в чем ошибка скрипта. Когда скрипт выполняю, вижу просто белую страницу: &lt;?php ini_set('error_reporting', E_ALL); ...

13
99 / 99 / 27
Регистрация: 26.01.2012
Сообщений: 342
Записей в блоге: 1
13.07.2012, 18:14
Это уже будет сложное программирование подобное написанию поисковых систем типа гугла или яндекса, а они не так просто устроены...
0
 Аватар для netsolex
53 / 53 / 4
Регистрация: 26.05.2011
Сообщений: 379
13.07.2012, 21:16  [ТС]
Нет ну это конечно уже слишком.. подобное написанию поисковых систем типа гугла или яндекса... ))) я совершенно не претендую на сложное програмирование... да и ни к чему мне такие сложности.. все должно быть просто , скромно и хорошо работать..
достаточно того что бы пользователь смог найти нужный товар по наименованию продукта или же по описанию ..
Конечно же у каждого свой вариант поиска и могут писать ключевые слова как в единственном числе так и во множественном числе.. ( стол , шкаф , стул - столы , шкафы , стулья ) И вот в этом и есть проблема что в этом скрипте уж слишком строгое отношение.. ищет только то что именно одинаково совпадает с ключевым словом.. Но ведь каждый пользователь может писать то что вздумается ему..

думаю всетаки должен быть какой то вариант когда поиск по базе происходит по приблизительным подходящим словам и не только в точности совпадающим..
0
99 / 99 / 27
Регистрация: 26.01.2012
Сообщений: 342
Записей в блоге: 1
13.07.2012, 22:22
Ну в таком случае можно отрезать от слова последние 2-3 буквы и искать по этому куску
PHP
1
$find=substr(htmlspecialchars(trim($_POST['find'])),0,strlen($_POST['find'])-2);
P.S. substr($str, $a, $b) возвращает подстроку из строки $str с атого по бэтый символ
strlen($str) - возвращает длинну строки
1
 Аватар для netsolex
53 / 53 / 4
Регистрация: 26.05.2011
Сообщений: 379
13.07.2012, 23:07  [ТС]
очень даже интересное решение ... всетаки хоть какое то решение. спасибочки !
но видимо для полноценной работы придется создать еще одну графу " metakeyword " в которой нужно записывать все возможные варианты ключевых слов и по ней потом искать поисковиком.. так по крайней мере будит работать поисковик в точности по всем возможным словам которые относятся непосредственно к данному товару ...

решение принято.
0
91 / 91 / 13
Регистрация: 14.07.2012
Сообщений: 539
16.07.2012, 03:41
netsolex, 43 строчку замените на
PHP
1
$data = mysql_query("SELECT * FROM users WHERE MATCH($field) AGAINST ('$find*' IN BOOLEAN MODE)");
должно работать не проверял. В база в полях должен быть включен полнотектовый поиск.
1
 Аватар для netsolex
53 / 53 / 4
Регистрация: 26.05.2011
Сообщений: 379
16.07.2012, 15:43  [ТС]
спасибо pyramida но модифицировав таким образом
PHP
1
$data = mysql_query("SELECT * FROM users WHERE MATCH($field) AGAINST ('$find*' IN BOOLEAN MODE)");
появляется такая ошибка. видимо это вариант не очень удачный ..

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\Inetpub\wwwroot\mindus2012\search.php on line 47

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Inetpub\wwwroot\mindus2012\search.php on line 59
Sorry, but we can not find an entry to match your query
0
91 / 91 / 13
Регистрация: 14.07.2012
Сообщений: 539
16.07.2012, 22:23
netsolex, сделайте после строчки запроса
PHP
1
2
3
if(!$data) {
echo mysql_errno() . ": " . mysql_error(). "\n";
}
и отпишите что он выдал.
0
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
17.07.2012, 01:53
Цитата Сообщение от netsolex Посмотреть сообщение
достаточно того что бы пользователь смог найти нужный товар по наименованию продукта или же по описанию ..
гугл позволяет осуществлять поиск исключительно по вашему сайту
причем форму поиска позволяет интегрировать на ваш сайт

если вам достаточно чтобы пользователь смог найти нужное, зачем велосипед изобретать?
0
 Аватар для netsolex
53 / 53 / 4
Регистрация: 26.05.2011
Сообщений: 379
17.07.2012, 03:03  [ТС]
Цитата Сообщение от Unick Посмотреть сообщение
гугл позволяет осуществлять поиск исключительно по вашему сайту
причем форму поиска позволяет интегрировать на ваш сайт

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

Добавлено через 15 минут
Цитата Сообщение от pyramida Посмотреть сообщение
netsolex, сделайте после строчки запроса
PHP
1
2
3
if(!$data) {
echo mysql_errno() . ": " . mysql_error(). "\n";
}
и отпишите что он выдал.
отписываю что выдает такое изменение..

PHP
1
2
3
4
5
6
7
Results
 
1214: The used table type doesn't support FULLTEXT indexes 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\Inetpub\wwwroot\mindus2012\search.php on line 51
 
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Inetpub\wwwroot\mindus2012\search.php on line 63
 Sorry, but we can not find an entry to match your query
0
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
17.07.2012, 03:06
ну в этом случае выбирайте, некая "ценность сайта" или "удобство пользователя"
Я вот некоторые вещи сам не смог сделать (правильнее сказать даже не пытался), вот такие как: подсветка синтаксиса кода, или визуальный html редактор...
Также хочу заметить, что вы взяли чей-то готовый код, это ведь не ваш, тогда речь идет уже не о самописном сайте (который делают своими силами), а о хранении кода на одном сервере
0
 Аватар для netsolex
53 / 53 / 4
Регистрация: 26.05.2011
Сообщений: 379
17.07.2012, 03:26  [ТС]
Цитата Сообщение от Unick Посмотреть сообщение
Также хочу заметить, что вы взяли чей-то готовый код, это ведь не ваш, тогда речь идет уже не о самописном сайте (который делают своими силами), а о хранении кода на одном сервере
да верно я этот код нашел на сайте about.com
этот скрипт который здесь выставил это начальная его стадия как есть на самом сайте about.com
это было своего рода свободный код типа как туториальчик как сделать поисковик на сайте..

в конечном итоге мне пришлось его полностью модифицировать и изменить чтобы начал работать как мне нужно...
убрал некоторые опции и добавил кое-что свое новое...

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

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


короче всеравно всем спасибо за участие.. пока нет возможности такой поправить его остаюсь при том варианте который уже сделал с дополнительными ключевыми слоавми для каждого товара..
0
не Администратор ^_^
 Аватар для Unick
988 / 223 / 23
Регистрация: 03.05.2009
Сообщений: 1,493
Записей в блоге: 1
17.07.2012, 03:31
если проблема только во множественном числе, то вынесете в отдельный массив все возможные окончания, которые собственно могут быть признаком
множественного числа
ы
ые
s
...

и вырезайте при нахождении из конца слова (например с помощью preg_match)
0
8 / 8 / 1
Регистрация: 25.07.2012
Сообщений: 50
25.07.2012, 15:23
Цитата Сообщение от netsolex Посмотреть сообщение

отписываю что выдает такое изменение..

PHP
1
2
3
4
5
6
7
Results
 
1214: The used table type doesn't support FULLTEXT indexes 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\Inetpub\wwwroot\mindus2012\search.php on line 51
 
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in D:\Inetpub\wwwroot\mindus2012\search.php on line 63
 Sorry, but we can not find an entry to match your query
Таблица InnoDB не поддерживает индексы FULLTEXT
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2012, 15:23
Помогаю со студенческими работами здесь

Поиск подстроки в базе данных
Здравствуйте! Такой вопрос: как можно сделать запрос-поиск по определённому полю в БД? Т.е. у меня есть содержимое -&quot;aaa bbb&quot;, и...

Поиск по базе данных и вывод найденной информации
В общем суть вот в чем у меня поиск идет из одной страницы а результат получаем на другой как это сделать при нажатие на кнопку поиск вот...

Поиск по базе данных + постраничный вывод данных
Привет всем! в общем с поиском данных всё нормально! но не работает постраничный вывод ((( не знаю, где не так (! посомтрите пожалуйста,...

Поиск в базе данных
Имеется таблица tovar $strSQL = &quot;SELECT * FROM tovar; В ней имеется колонка названия(nazvanie), каким образом можно призвести поиск,...

Поиск по базе данных
Народ возникла необходимость поиска по бд,есть вот такой php код,но ничего не находит,я думаю косяк в SQL запрос,помогите если знаете!...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru