Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Базы данных > MySQL
Перезагрузить страницу Поиск по БД MySQL
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 20.07.2009, 22:38

Добрый день
Возникла такая проблема. На сайте есть форма поиска. При поиске, например, по слову "тема", выполняется следующий запрос:

Код:
SELECT title, text, code
FROM news
WHERE 
sh = 'Y' && text LIKE '% тем%' || 
sh = 'Y' && title LIKE '% тем%' || 
sh = 'Y' && text LIKE 'тем%' || 
sh = 'Y' && title LIKE 'тем%'
LIMIT 0 , 300
По идее должны выводится записи, где содержатся слова "тема", "темы", "тематика" и т.д. (слово в начале строки или перед ним стоит пробел). А на самом деле в результате выводятся записи, содержащие "система", "затем", "Артем". Почему так происходит никак не пойму. Помогите разобраться.
Ответить с цитированием
  (#2 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,454
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 21.07.2009, 06:49

откуда в mysql взялись && и || ?
и группировка операторов вообще никакая.
Ответить с цитированием
  (#3 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 22.07.2009, 00:42

Цитата:
откуда в mysql взялись && и || ?
и группировка операторов вообще никакая.
Да у меня по всему сайту && и ||, всё отлично работает, т.е. MySQL их нормально переваривает. Но сейчас это не суть.
По поводу группировки понимаю, что каряво, но по другому у меня пока не получается.
Я поэтому и задал вопрос на форуме. А как надо правильно?
Ответить с цитированием
  (#4 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,454
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 22.07.2009, 07:37

Код:
SELECT title, text, code
FROM news
WHERE
sh = 'Y' && (text LIKE '% тем%' || title LIKE '% тем%' || text LIKE 'тем%' || title LIKE 'тем%')
LIMIT 0 , 300
Ответить с цитированием
  (#5 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 25.07.2009, 01:32

Цитата:
Код:
SELECT title, text, code
FROM news
WHERE
sh = 'Y' && (text LIKE '% тем%' || title LIKE '% тем%' || text LIKE 'тем%' || title LIKE 'тем%')
LIMIT 0 , 300
Спасибо. Не знал, что в MySQL можно использовать скобки. Так запрос выглядит гораздо короче.
Только это не решает главной проблемы: при поиске "%_тема%" упорно выдаётся "система". Сам не понимаю почему так происходит.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,454
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 25.07.2009, 08:32

скобки здесь не для краткости, они меняют порядок действий.
символ подчеркивания в mysql запросах является символом подстановки:
_ один любой символ
% любое число любых символов

вам надо экранировать его \_
Ответить с цитированием
  (#7 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 26.07.2009, 21:39

Цитата:
скобки здесь не для краткости, они меняют порядок действий.
символ подчеркивания в mysql запросах является символом подстановки:
_ один любой символ
% любое число любых символов

вам надо экранировать его \_
Никакой символ подстановки мне не нужен. Я символ "_" поставил здесь для наглядности. Это пробел.

Мне нужно, чтобы искались слова, начинающиеся с "тем...". Т.б. по маске "тем%" (в начале строки) или "% тем%" (в середине строки, перед словом пробел)
Ответить с цитированием
  (#8 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,454
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 27.07.2009, 06:44


должно быть так?
Ответить с цитированием
  (#9 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 27.07.2009, 21:04

Цитата:

должно быть так?
Ну я в общем-то так и написал. Ну да лана, я уже придумал, как лучше сделать средствами PHP.
Спасибо за помощь.

А может есть ещё какие-нить алгоритмы для поиска помимо обрезания окончаний?
Ответить с цитированием
  (#10 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,454
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 27.07.2009, 22:33

Цитата:
Ну я в общем-то так и написал.
оно даже работает так, как требовалось в условии

в mysql ещё есть функции поиска регулярными выражениями.
http://dev.mysql.com/doc/refman/5.0/...functions.html
Ответить с цитированием
  (#11 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 01.08.2009, 01:59

Цитата:
в mysql ещё есть функции поиска регулярными выражениями.
http://dev.mysql.com/doc/refman/5.0/...functions.html
А есть ли что-нибудь на русском и желательно не очень заумно?
Ответить с цитированием
  (#12 (permalink)) Старый
Jokerjar Jokerjar вне форума
Member
 
Сообщений: 36
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 13.01.2007
По умолчанию 16.08.2009, 08:30

Есть еще оператор rlike, с помощью него можно работать с регулярными выражениями. Почитайте доки
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
AnWeb AnWeb вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.07.2009
По умолчанию 16.08.2009, 14:34

Да, RLIKE полезная вещь. У меня получился вод такой запрос:

Код:
SELECT title, text, code FROM $table WHERE sh='Y' AND ((text LIKE '%$word1%$word2%' AND text RLIKE '$word1.{2,10}$word2') OR (text LIKE '%$word2%$word1%' AND text RLIKE '$word2.{2,10}$word1') OR title LIKE '%$word1%$word2%' OR title LIKE '%$word2%$word1%')
Работает достаточно быстро. Выдаёт нужные результаты. По крайней мере пока ошибок не выявил.

Единственное, корректную подсветку пока не смог сделать. Но, думаю, это дело времени
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP+MySQL imported_АлексейВ PHP 5 17.02.2008 21:06
Проблема с установкой MySql 5 или MySql 4 romawka_ural MySQL 2 14.09.2007 00:34
MySQL Aram PHP 32 19.05.2007 12:26
PHP + MySQL Maximych Задания за деньги 1 08.05.2007 00:09
MySQL zornig PHP 7 07.12.2006 01:55
Поиск в бд MySQL value2006 PHP 1 14.09.2006 08:17
VB vs MySql Василий петрович Visual Basic 5 23.01.2006 13:07
PHP 4 and MySQL 4 kost PHP 10 06.01.2006 01:53
Поиск по базе MySQL Maddoctor PHP 8 10.06.2005 05:10
dbf=>mysql Ghead PHP 1 22.11.2004 15:57
MySQL: класс для работы с ней, поиск по базе feedbee PHP 5 08.07.2004 21:11



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов