Приоритет столбцов при запросе с WHERE

  • Автор темы 2People
  • Дата начала

2People

Guest
Приоритет столбцов при запросе с WHERE

В БД есть 3 поля:

field1 - по одному слову в поле (вид документа (закон или акт))
field2 - по 50 слов в поле (ключевые слова)
field1 - по 0.5-1Mb в поле (сам документ)
всего строк ~300

Чтобы выбрать сначала из первого столбца, потом из второго (из найденых по 1), потом по 3, достаточно написать

where field1='закон' and field2='земля' and field3='продажа'

?
 

Demiurg

Guest
если тебе надо узнать входит ли данное слово в поле используй like.
 

Апельсин

Оранжевое создание
От того, что ты переставишь эти условия местами - результат не измениться ;)
Насколько я поняла твой случай, то что ты написал - должно работать.
Нужно изменить порядок вычисления условий - используй скобки.
 

2People

Guest
Автор оригинала: Апельсин
От того, что ты переставишь эти условия местами - результат не измениться ;)
это понятно, вопрос в другом
ход моих мыслей=>
по полю где 1 слово в каждой ячейке поиск пройдёт быстрее, чем по полю где по мегу в каждой ячейке. Вот я и хочу, чтобы второй поиск был из результатов первого, а третий из результатов второго
 

Апельсин

Оранжевое создание
> Индексы настрой по первому полю.

а лучше вообще использовать составной индекс, если он делает поиск по всем 3м полям.
 

2People

Guest
как настроить индексы?
так - INDEX name (field1,field2)) или как, и куда 3 поле записать
 

2People

Guest
я хочу сделать полнотекстовый поиск FULLTEXT по каждому полю, сначала по 1 потом по 2 потом по 3, но может быть и такое, что только по 1 а потом по 3 или по 2 потом по 3 или только по 3
 

Апельсин

Оранжевое создание
field3 - это у тебя текстовое поле, содержащее сам документ и ты ищешь слово в этом документе? если да, то на это поле тебе индекс создавать не надо, т.к. он все равно использоваться не будет при запросах типа like "%search_word%".

в таком случае просто создаешь индекс на (field1, field2) как ты сам и написал, а условия выборки те же самые будут.
 

Апельсин

Оранжевое создание
полнотекстовый поиск FULLTEXT - ээ ... ну так что же ты раньше молчал про полнотекстовый поиск.
У меня и так телепатические способности на зачаточном уровне, а когда болею вообще напрочь отшибает.

Тогда если тебе необходимо будет искать только в одном из полей, создай полнотекстовый индекс на каждый из столбцов.
 

Demiurg

Guest
>а лучше вообще использовать составной индекс, если он делает поиск по всем 3м полям.
как я понял во втором и третем у него текст и он ищет вхождение слова.
 

2People

Guest
на страничке есть форма для поиска там можно выбрать (или не выбрать)
1)тип докуменда (закон, акт или постановление и т.д.) (поле формы select) выборка из field1 в БД
2)ввести ключевые слова (или не ввести) (поле формы input) выборка из field2 в БД
3)просто слово, по которому искать в самом документке(поле формы input) выборка из field3 в БД


В БД есть 3 поля:

field1 - по одному слову в поле (вид документа (закон или акт))
field2 - по 50 слов в поле (ключевые слова)
field1 - по 0.5-1Mb в поле (сам документ)
всего строк ~300

как сделать поиск? Вернее как правильно сделать запрос к БД.
 

2People

Guest
Я хочу сделать так:

из первого поля можно выбрать where field1='закон'
из второго MATCH (field2) AGAINST ('продажа')
из третьего через регулярные выражения.

Но как сделать последовательность выборки, чтобы сначала поиск по 1 полю, на основании полученных результатов по 2, на основании второго результата по 3?
 

Апельсин

Оранжевое создание
то что ты описываешь называется derived tables.
Если тебе так приспичило делать выбору такой сложности, и у тебя нет версии 4.1, то используй временные таблицы.

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

vovanium

Новичок
А field1 что текстовый? Или все-таки какой-нибудь ENUM('закон','акт') или просто номер типа документа?
 

2People

Guest
2vovanium:
field1 - varchar

2Апельсин:
Вдруг напишут "купить земля".
Если полнотекстовый поиск ищет сначала купить, а потом земля по отдельности, тогда я бы воспользовался им, но как я понимаю он будет искать точно "купить земля" (почемуто мне кажется, что я ошибаюсь).
 

Апельсин

Оранжевое создание
> временная таблица, это SQL_BUFFER_RESULT

нет, это temporary table

Вдруг напишут "купить земля".
Если полнотекстовый поиск ищет сначала купить, а потом земля по отдельности, тогда я бы воспользовался им, но как я понимаю он будет искать точно "купить земля" (почемуто мне кажется, что я ошибаюсь).
используй булевский полнотекстовый поиск

+купить +земля
будет искать текст в котором есть оба этих слова.

купить земля
будет искать текст в котором хотя бы одно из этих слов есть

"купить земля" будет искать текст в котором точно есть фраза "купить земля"

http://www.mysql.com/doc/en/Fulltext_Search.html
 
Сверху