Автор Тема: Поиск по сайту  (Прочитано 11237 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Поиск по сайту
« Ответ #15 : 17 Марта 2004, 17:44:18 »
ход мыслей понятен
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по сайту
« Ответ #16 : 24 Марта 2004, 16:08:20 »
Я пробовал в свое время разные подходы - мура. Потом посидел и написал спайдер, написал к нему парсер и такой поиск получился что плакать хочется до сих пор от счастья, ищет все. Прям маленький Яндекс получился.
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн tomashik

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #17 : 18 Апреля 2004, 15:20:34 »
Почитал я ваш пост, но так и непонял как мне сделать:

1. Есть прайс лист. В нем кроме всего прочего наименования товаров. Например: стул деревянный, стул металлический, стол.
Вся эта инфа храниться в mysql

2. Нужно сделать что бы юзверь мог ввести в строку запроса "стул" и ему вывелись две позиции "стул деревянный, стул металл.".

Как это сделать?

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по сайту
« Ответ #18 : 20 Апреля 2004, 10:50:30 »
Я сделал как советует USE именно универсальный поиск. Написал робота который обходит через ХТТП весь сайт, индексит страницы, засовывает их в одну таблицу, добавляет адрес где была найдена и все. А потом по этому ищещь поиском с которым тоже нужно немного конечно повозиться, но все же чудесно работает.

У меня проблема с этим поиском только одна всего. Хостер поддерживает Save Mode у ПХП и из за этого неработает set_time_limit блин... из за этого когда сейчас сайт сильно розрасся и на индексирование уходит пару тройку минут скрипт обрывается.. Блин. Что делать пока еще недумал.

Если кто знает и по моему моменту посоветуйте пожалуста.

А так поиск - плакать хочется. Вообще если скрипт перестроить немного можно вообще по инету пройтись, или я баловался индексировал чужие сайты для себя... применение спайдеру много есть. Может я неправильно делаю но я так погуду себе вставляю кроном с Гисметео и курсы валют на каждый день.
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн tomashik

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #19 : 21 Апреля 2004, 18:35:39 »
мне не нужно делать полнотекстовый поиск.

у меня есть база mysql, в ней таблице. и поле "name", там хранятся название товаров.

Мне нужно что бы пользователь ввел хочу товар такой-то такой и скрипт прошелся по БАЗЕ и выдал их.
Т.е. я представляю это сделать только с помощью where, но что там вводить, что бы не искало не только точные совпадения но и не полные названия. (пример см. выше)

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по сайту
« Ответ #20 : 21 Апреля 2004, 18:55:51 »
ну тогда поможет LIKE и REGEXP
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн tomashik

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #21 : 21 Апреля 2004, 19:00:29 »
а можно поподробнее об этих функциях, здесь или ссылочку какую. Яндекс не находит про эти функции. Да и пару хранящихся у меня синтаксисов mysql ничего не знают об этих функциях.

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #22 : 21 Апреля 2004, 19:07:51 »
AS IS...

Оффлайн tarya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 370
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по сайту
« Ответ #23 : 21 Апреля 2004, 19:09:45 »

3.3.4.7 Сравнение по шаблонам

В MySQL реализовано стандартное для SQL сравнение по шаблонам
а также особый тип такого сравнения он основан на использовании выраженийподобных применяющимся в служебных программах Unix (такихкак vigrep и sed). 

В SQL при сравнении по шаблону символ `_\' обозначает любой одиночный символ, а `%\' - определенное количество символов (включая ноль символов). В MySQL в SQL-шаблонах по умолчанию не учитывается регистр символов. При работе с шаблонами SQL использование операторов = или <> не допускается, вместо этого применяются операторы сравнения LIKE или NOT LIKE. 

Найти все имена, начинающиеся с `b\', можно следующим образом: 

mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

Найти все имена, заканчивающиеся на `fy\', можно следующим образом: 

mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

Найти все имена, содержащие `w\', можно следующим образом: 

mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

Найти все имена, содержащие ровно пять символов, можно при помощи шаблонного символа `_\': 

mysql> SELECT * FROM pet WHERE name LIKE "_____";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

Во втором типе шаблонов, предусмотренных в MySQL, используются расширенные регулярные выражения. При поиске совпадений на основе такого шаблона шаблоном нужно пользоваться операторами REGEXP и NOT REGEXP (или их синонимами - RLIKE и NOT RLIKE). 

Ниже приведены некоторые характеристики расширенных регулярных выражений: 

`.\' обозначает любой символ. 
Класс символов `[...]\' обозначает любой из символов в скобках. Например, `[abc]\' обозначает `a\', `b\' или `c\'. Набор символов можно обозначить с помощью дефиса. `[a-z]\' обозначает любую букву нижнего регистра, а `[0-9]\' - любую цифру. 
`*\' обозначает ноль или более экземпляров символа, стоящего перед ним. Например, `x*\' обозначает любое количество символов `x\', `[0-9]*\' обозначает любое количество цифр, а `.*\' - любое количество любых символов. 
Для шаблона выдается совпадение, если поисковый контекст обнаружен в любой из частей значения, в котором производится поиск (для шаблонов SQL совпадение выдается только в случае, если совпадает все значение). 
``Закрепить\'\' шаблон так, чтобы проверять совпадения с началом или концом значения можно с помощью символов `^\' (начало) или `$\' (конец), которые располагаются в начале или в конце шаблона соответственно. 
Чтобы продемонстрировать работу регулярных выражений, приведенные выше запросы LIKE здесь переписаны с использованием REGEXP. 

Найти все имена, начинающиеся с `b\', можно при помощи символа `^\', привязывающего шаблон к началу имени: 

mysql> SELECT * FROM pet WHERE name REGEXP "^b";
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

В версиях MySQL до 3.23.4 REGEXP учитывает регистр символов, и приведенный запрос не возвратит никаких результатов. Для поиска символов `b\' верхнего или нижнего регистра воспользуйтесь следующим запросом: 

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";

Начиная с версии MySQL 3.23.4, заставить REGEXP учитывать регистр символов можно с помощью ключевого слова BINARY. В этом запросе положительный результат поиска будет получен только при обнаружении символа \'b\' нижнего регистра в начале имени: 

mysql> SELECT * FROM pet WHERE name REGEXP BINARY "^b";

Найти все имена, заканчивающиеся на `fy\', можно при помощи символа `$\', привязывающего шаблон к концу имени: 

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

Найти все имена, содержащие символ `w\' любого регистра, можно так: 

mysql> SELECT * FROM pet WHERE name REGEXP "w";
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

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

Найти все имена, содержащие ровно пять символов, можно, если привязать поиск к началу и концу имени с помощью символов `^\' и `$\' и поставить пять символов `.\' между ними: 

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

Предыдущий запрос можно записать и при помощи оператора `{n}\' (``повторить-n-раз\'\'): 

mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+
Рожденный с понимающим, и гордо поднятым кулаком! Свидетель разреза запястья — он с ним!

Оффлайн tomashik

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #24 : 21 Апреля 2004, 20:01:49 »
tarya
Большое спасибо.

Вот что получилось:

$sql 
= \'SELECT * \'
        . \' FROM `computer` \'
        . \' WHERE 1 AND `name` \'
        . \' LIKE \\\'%третий%\\\' LIMIT 0, 30\'; 



Так работает.


$pr
="третий";

а ни так, ни так не работает.

$pr
="\\\'%третий%\\\'";

Оффлайн tomashik

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #25 : 21 Апреля 2004, 20:52:18 »
я сам разобрался.

tarya
а откуда была инфа данная выше?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Поиск по сайту
« Ответ #26 : 21 Апреля 2004, 23:11:02 »
tarya, совсем не обязательно полностью цитировать всю главу из документации. Достаточно просто дать ссылку и/или привести выдержки, но не всю главу.

> а откуда была инфа данная выше?

из документации
На Машине Тьюринга далеко не уедешь.

 

Sitemap 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