Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по базе, две таблицы 
V
    Опции темы
patap
Дата 13.8.2010, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 3
Всего: 40



Есть две таблицы

Код

[records]
 -  id
 -  name
 -  info

[note]
 -  note_id
 -  note_record_id
 -  note_text


Нужно сделать поиск в этих таблицах, по полям

Код

records.name
records.info
note.note_text


Сделал следующим образом
Код

SELECT DISTINCT records.id, records.name, records.info, note.note_text 
FROM records LEFT JOIN note ON 
  (records.id = note.note_record_id AND 
   note_id IN (SELECT note_id FROM note WHERE note_text LIKE '%$search%') -- это условие для того, чтобы приджойнить к records только те заметки, в которых есть ключевая строка
                                                                          -- это для того, чтобы в результат включить значения note_text, т.к. сделать UNION с records, в условии ниже, 
                                                                          -- по полю note_text невозможно
  )
WHERE id IN -- 
  (SELECT id FROM records WHERE name LIKE '%$search%' OR info LIKE '%$search%' 
   UNION SELECT note_record_id FROM note WHERE note_text LIKE '%$search%') -- если делать без UNION с note, то если в records.name или records.info не будет 
                                                                           -- совпадений - вернется пустой результат. А нужно учесть те записи, в которых нет 
                                                                           -- совпадений по records.name или records.info, но есть совпадения в связнаных с ними заментками из таблицы note
ORDER BY records.id


запрос выполняет то, что нужно. Но у меня есть сомнения по поводу оптимальности (т.к. в этой области я не очень)
Также вопрос на счет индексов - нужны ли они здесь? Я так понимаю что при такой маске как %$search% - ненужны...

Расчитываю на советы, поправки и замечания

Это сообщение отредактировал(а) patap - 13.8.2010, 09:51


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
skyboy
Дата 13.8.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(patap @  13.8.2010,  08:50 Найти цитируемый пост)
Но у меня есть сомнения по поводу оптимальности (т.к. в этой области я не очень)

раз на view нельзя сделать fulltext index, также нет возможности сделать один fulltext index на поля разных таблиц, то тебе либо нужен внешний индексатор(рекомендую sphinx), либо придется искать в каждой таблице отдельно по fulltext индексу и объединять результаты поиска.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.