Вопрос по SQL
Модератор: Злобный
- MXC
- Продвинутый
- Сообщения: 267
- Зарегистрирован: Чт сен 18, 2003 03:32
- Откуда: Кишингтаун
- Контактная информация:
Вопрос по SQL
Собсна Туплю второй день
есть таблица:
поля News_Type, News_Headline, News_Text
Нужно софрмировать следующий вопрос: Выбрать все записи которые содержат искомое слово , а также являющиеся News_Type=1
я пишу:
Select * From [News] WHERE News_Type =1 AND News_Headline LIKE '%" + _искомое слово_+ "%' AND News_Text LIKE '%" + _искомое слово_ + "%' ORDER BY News_Date DESC";
и не ищет правильно чтото... виджу я что ошибка тут с AND и OR гдето...
И еще Злобный можещ стукнуть мне в ацку, я твою найти не могу, дело есть)))
есть таблица:
поля News_Type, News_Headline, News_Text
Нужно софрмировать следующий вопрос: Выбрать все записи которые содержат искомое слово , а также являющиеся News_Type=1
я пишу:
Select * From [News] WHERE News_Type =1 AND News_Headline LIKE '%" + _искомое слово_+ "%' AND News_Text LIKE '%" + _искомое слово_ + "%' ORDER BY News_Date DESC";
и не ищет правильно чтото... виджу я что ошибка тут с AND и OR гдето...
И еще Злобный можещ стукнуть мне в ацку, я твою найти не могу, дело есть)))
- Weekers
- ГУРУ
- Сообщения: 9085
- Зарегистрирован: Чт сен 05, 2002 15:55
- Откуда: тутошний
- Контактная информация:
Похоже, это MySQL...
Я с ним дела не имел, но вроде должно быть так:
Иначе (без OR) будут выбираться только те записи, у которых искомое слово в обоих полях.
Я с ним дела не имел, но вроде должно быть так:
Код: Выделить всё
Select *
From [News]
WHERE News_Type =1 AND ((News_Headline LIKE '%" + _искомое слово_+ "%') OR (News_Text LIKE '%" + _искомое слово_ + "%'))
ORDER BY News_Date DESC";
MXC,
В SQL Server есть такая вещь как полнотекстовой поиск. Строится специальный Full-text catalog по набору таблиц-колонок. После этого ищешь предикатом CONTAINS.
На базе Northwind построил Full-text catalog по таблице Customers - колонкам ContactName, CompanyName. Ищутся все записи, у которых в колонках ContactName или CompanyName встречаются слова "Howard" или "Old". Одновременно в одном CONTAINS можно искать по колонкам нескольких таблиц, связав их (таблицы) JOIN-ом, к примеру.
Если стоит Сервер 2005, то полный синтаксис CONTAINS в BOL тут: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/996c72fc-b1ab-4c96-bd12-946be9c18f84.htm
Полезная вещь, если строится полнотекстовой поиск по всему приложению, который должен затронуть множество таблиц. Кстати, LIKE c левым "%" критически действует на производительность - индексы перестают использоваться, так что аккуратнее с этим.
В SQL Server есть такая вещь как полнотекстовой поиск. Строится специальный Full-text catalog по набору таблиц-колонок. После этого ищешь предикатом CONTAINS.
Код: Выделить всё
SELECT * FROM Customers
WHERE CONTAINS ((ContactName, CompanyName), '"Howard" OR "Old"') -- первый параметр - список колонок для поиска, второй - что искать.
Если стоит Сервер 2005, то полный синтаксис CONTAINS в BOL тут: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/996c72fc-b1ab-4c96-bd12-946be9c18f84.htm
Полезная вещь, если строится полнотекстовой поиск по всему приложению, который должен затронуть множество таблиц. Кстати, LIKE c левым "%" критически действует на производительность - индексы перестают использоваться, так что аккуратнее с этим.
Код: Выделить всё
SELECT LEFT(kod, 2) AS kod
FROM ...