Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2012, 22:01   #1
Ричи
 
Регистрация: 30.09.2011
Сообщений: 8
Сообщение Массив для поиска PHP

Привет кодеры, есть вопрос, может кто заинтересован помочь. И так
осуществляю поиск по базе данных mysql.
Небольшой пример:
В базе(называется search)у нас три столбца: id,text,nick.
Код поиска:
PHP код:
$query=mysql_query("SELECT `id`,`text`,`nick` FROM `search` WHERE `id`LIKE '%".$word."%' OR `text` LIKE '%".$word."%' OR `nick` LIKE '%".$word."%' " ); 
$word это присвоенная переменная от формы поиска.
И вот самая соль вопроса, при поиске он ищет только одно слово, а как сделать так что бы он искал больше слов, скажет в ячейке ТЕХТ у нас запись - "PHP и другие серверные скрипты". Если Я ввожу "PHP", то он находит этот пост, но вот если введу "PHP скрипты", то уже не находит, и в общем вот что нужно то
- Резать строку на слова забивать в массив, и искать уже несколько слов
array (
[0]=>PHP,
[1]=>Скрипты
Но вот только никак не получается.

Последний раз редактировалось Ричи; 29.06.2012 в 23:49.
Ричи вне форума Ответить с цитированием
Старый 30.06.2012, 00:42   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Резать строку можно так
Код:
explode(' ',$str);
motorway вне форума Ответить с цитированием
Старый 30.06.2012, 10:30   #3
Ричи
 
Регистрация: 30.09.2011
Сообщений: 8
По умолчанию

Всем спасибо, проблему решил, вдруг если кому нужно будет в будущем сделал так -
PHP код:
$words explode(" ",$word);     //разбиваем поисковый запрос на слова через пробел и заносим все слова в массив
foreach ($words as $word) {     //в цикле для массива words переносим значения в переменную word
                
        
}
$query=mysql_query("SELECT `id`,`text`,`nick` FROM `search` WHERE `id`LIKE '%".$word."%' OR `text` LIKE '%".$word."%' OR `nick` LIKE '%".$word."%' " ); 
Ричи вне форума Ответить с цитированием
Старый 30.06.2012, 10:37   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

запросы в цикле - не очень хорошая идея
ADSoft вне форума Ответить с цитированием
Старый 30.06.2012, 11:02   #5
Ричи
 
Регистрация: 30.09.2011
Сообщений: 8
По умолчанию

Но ведь без него не работает.
Ричи вне форума Ответить с цитированием
Старый 30.06.2012, 21:35   #6
Ричи
 
Регистрация: 30.09.2011
Сообщений: 8
По умолчанию

Кстати то что было выше, частично решило проблему, но полностью все же нет, он конечно ищет, но ищет по последнему слову в строке(
Ричи вне форума Ответить с цитированием
Старый 30.06.2012, 21:55   #7
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

делайте не запросы в цикле, а дополняйте переменную новыми условиями поиска, т.е.
Цитата:
$words = explode(" ",$words);
for($i=0;$i<count($words);$i++){
$search=$search." `id`LIKE '%".$words[$i]."%' OR `text` LIKE '%".$words[$i]."%' OR `nick` LIKE '%".$words[$i]."%' " ";
if($i!=count($words[$i])-1) $search=$search." OR ";
}
$query=mysql_query("SELECT `id`,`text`,`nick` FROM `search` WHERE $search" );
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 22:14   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
делайте не запросы в цикле, а дополняйте переменную новыми условиями поиска
Не советую.
Вышеприведенный код составляет некорректный запрос:
PHP код:
$words 'search string some words and some words again';
$words explode(" ",$words);
for(
$i=0;$i<count($words);$i++){
$search=$search." `id`LIKE '%".$words[$i]."%' OR `text` LIKE '%".$words[$i]."%' OR `nick` LIKE '%".$words[$i]."%' ";
if(
$i!=count($words[$i])-1$search=$search." OR ";
}
echo 
"SELECT `id`,`text`,`nick` FROM `search` WHERE $search"
Формирует такой запрос:
Цитата:
SELECT `id`,`text`,`nick` FROM `search` WHERE `id`LIKE '%search%' OR `text` LIKE '%search%' OR `nick` LIKE '%search%' `id`LIKE '%string%' OR `text` LIKE '%string%' OR `nick` LIKE '%string%' OR `id`LIKE '%some%' OR `text` LIKE '%some%' OR `nick` LIKE '%some%' OR `id`LIKE '%words%' OR `text` LIKE '%words%' OR `nick` LIKE '%words%' OR `id`LIKE '%and%' OR `text` LIKE '%and%' OR `nick` LIKE '%and%' OR `id`LIKE '%some%' OR `text` LIKE '%some%' OR `nick` LIKE '%some%' OR `id`LIKE '%words%' OR `text` LIKE '%words%' OR `nick` LIKE '%words%' OR `id`LIKE '%again%' OR `text` LIKE '%again%' OR `nick` LIKE '%again%' OR
Запрос с ошибками - и по логике страшный.

Вполне допустим вариант выполнения отдельных запросов в цикле - но только если этот цикл у вас будет иметь строго ограниченное максимальное количество итераций.
Другими словами - вы должны будете установить лимит на количество отдельных слов в поисковом запросе.
Andkorol вне форума Ответить с цитированием
Старый 30.06.2012, 23:18   #9
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Не советую.
Вышеприведенный код составляет некорректный запрос:
PHP код:
$words 'search string some words and some words again';
$words explode(" ",$words);
for(
$i=0;$i<count($words);$i++){
$search=$search." `id`LIKE '%".$words[$i]."%' OR `text` LIKE '%".$words[$i]."%' OR `nick` LIKE '%".$words[$i]."%' ";
if(
$i!=count($words[B][$i][/B])-1$search=$search." OR ";
}
echo 
"SELECT `id`,`text`,`nick` FROM `search` WHERE $search"
Формирует такой запрос:Запрос с ошибками - и по логике страшный.

Вполне допустим вариант выполнения отдельных запросов в цикле - но только если этот цикл у вас будет иметь строго ограниченное максимальное количество итераций.
Другими словами - вы должны будете установить лимит на количество отдельных слов в поисковом запросе.
вопрос с ошибками, т.к. вставлял копипастом. Здесь:
PHP код:
if($i!=count($words[$i])-1$search=$search." OR "
нужно просто удалить [$i] и в последнем случае не будет OR
По логике страшный?
Задание: Найти строки, в которых есть совпадение. Запрос: сравнить 3 поля с введенными словами.
Хотите сказать, что может быть что-то правильнее и логичнее этого запроса?)) ну да... лучше делать кучу запросов в цикле и потом с каждым парить голову с правильной сортировкой и приоритетом результатов

Последний раз редактировалось Pamparam; 30.06.2012 в 23:20.
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 23:42   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
По логике страшный?
Хотите сказать, что может быть что-то правильнее и логичнее этого запроса?
Спорить с вами по поводу логики я даже не буду пытаться - с этим мне всё понятно по другой вашей теме.
Скажу одно - я бы без разговоров уволил любого программиста, составившего подобный запрос:
Цитата:
SELECT `id`,`text`,`nick` FROM `search` WHERE `id`LIKE '%search%' OR `text` LIKE '%search%' OR `nick` LIKE '%search%' `id`LIKE '%string%' OR `text` LIKE '%string%' OR `nick` LIKE '%string%' OR `id`LIKE '%some%' OR `text` LIKE '%some%' OR `nick` LIKE '%some%' OR `id`LIKE '%words%' OR `text` LIKE '%words%' OR `nick` LIKE '%words%' OR `id`LIKE '%and%' OR `text` LIKE '%and%' OR `nick` LIKE '%and%' OR `id`LIKE '%some%' OR `text` LIKE '%some%' OR `nick` LIKE '%some%' OR `id`LIKE '%words%' OR `text` LIKE '%words%' OR `nick` LIKE '%words%' OR `id`LIKE '%again%' OR `text` LIKE '%again%' OR `nick` LIKE '%again%'
- и при этом утверждающего, что данное решение является единственно правильным и логичным.
Ничего личного.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос для поиска позиций и вывода данных на лист поиска mr-111 Microsoft Office Excel 12 13.03.2012 15:03
Вебинар по PHP - для тех, кто хочет начать изучение PHP, 30 июля. PHPLance HTML и CSS 0 23.07.2011 22:33
С++ Создать массив из результатов поиска freeeeez Помощь студентам 2 07.05.2011 01:06
Организация поиска на PHP+MySQL yfnf3 Помощь студентам 2 14.02.2011 22:15
Необходимо создать условием поиска по mysql на php kutt PHP 20 11.12.2010 23:54