| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Поиск |
| Автор: essan 17.4.2006, 10:27 |
| Подскажите плиз... в данном случае ищет буквально по одной букве, а как сделать правильно чтобы по полному совпадению слова, но не выражения! бла-бла-бла <input type="text" name="searchfor" value="<?php echo $searchfor ?>"> <input type="submit" value="Поиск"><br> бла-бла-бла $sql_query = "SELECT * FROM movie WHERE (title LIKE '%$searchfor%' and catalog LIKE '%$ser%')"; бла-бла-бла Если в таблице текст: отпетые мошенники Например чтоб результат выдавался по запросу только либо если в строке поиска было указанно отпетые или мошенники а вааще я так думаю, что окончания могут быть разные, то правильней бы сделать по совпадению в слове например пяти букв |
| Автор: Darhazer 17.4.2006, 10:33 |
| ... |
| Автор: madFobos 17.4.2006, 11:02 | ||
Ну можно регулярные выражения использовать еще. Хотя тут надо просто перед поиском подготовить твою фразу, напрмер (я не буду описывать всякие проверки на ' и пр. попытки взлома юных хакеров, потому что обычно для этих целей PEAR:
Не тестил, но идея такая. Если же тебе по окончаниям надо, то напиши какую нибудь функцию, которая бы эти окончания анализировала и убирала из слов, тогда ты можешь сначала разбить с помощью preg_split("/\s/", ...) строку на составляющие слова, затем применить к каждому элементу функцию обрезания окончаний (с помощью, например array_map) и далее все слить опять в строку. |
| Автор: essan 17.4.2006, 11:53 |
| Спасибо желание помочь! $searchfor стала равна 'Отпетые','Мошенники' теперь ищет слово полностью :-) но только если оно одно в таблице если в таблице два слова, то по запросе одного слова из них, выдается нулевой результат. А если в строке поиска задать два слова например Отпетые мошенники, то тогда выдает ошибку... mysql_numrows(): supplied argument is not a valid MySQL у меня дальше вот такой код: $result = mysql_query($sql_query); $results = mysql_numrows($result); echo "По запросу <em>$searchfor</em> найдено видеосюжетов: $results"; if($results!='0') { echo " $lang[body] <LINK rel=stylesheet type=text/css href=phorum/styles.css><table width=\"100%\" border=\"0\" class=\"ramka\" cellspacing=\"1\" cellpadding=\"0\">"; while ($rows = mysql_fetch_array($result)) { echo "<tr class=back><td><img src=phorum/avat/$rows[id].jpg alt=\"$rows[title]\"></td><td>$rows[title]</td><td>$rows[description]</td><td>$rows[actor]</td><td>$rows[language]</td><td>$rows[format]</td><td>$rows[amount]</td><td>$rows[money]</td></tr>"; } echo "</table>"; } } |
| Автор: madFobos 19.4.2006, 07:37 | ||
Точно, я ошибся слегка, должно быть так:
Не факт, что это тоже будет работать, но идея такая, т.е. у тебя будет получаться "Отпетые|Мошенники", символ | означает или в регулярных выражениях. |
| Автор: essan 20.4.2006, 06:26 |
| Замучался я совсем. Подскажите, а лучше поправьте. Мне необходимо чтобы поиск находил полное соответствие(буква в букву) слова. Именно слова а не всего содержимого ячейки. Например в поле есть ячека где записано: Улица разбитых фонарей. Надо так чтоб поиск нашел в случае если в строке поиска было набрано хотя бы одно слово, полностью совпадавшее. Например если набрать: Улица фонариков либо Улицы фонарей, то результат должен быть, так как есть полное соответствие в словах Улица и фонарей, а если слово обрезанное или неправильное окончание, то результата не должно быть, как например Улиц или фон. $searchfor = preg_replace("/\s/", "|", trim($searchfor)); $searchfor = preg_replace("/^|$/", "'", $searchfor); if($searchfor!=''){ if ($ser!=actor) {$sql_query = "SELECT * FROM movie WHERE title REGEXP (".$searchfor.") and catalog LIKE '%$ser%'";} else {$sql_query = "SELECT * FROM movie WHERE actor LIKE (".$searchfor.")";} $result = mysql_query($sql_query); $results = mysql_numrows($result); while ($rows = mysql_fetch_array($result)) { //выводит найденное поле } |
| Автор: Medwoodu 20.4.2006, 15:52 |
| прошу прощения, но по этим темам куча статей, например _http://phpclub.ru/detail/article/mysql_search посмотрите на дату статьи |