Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск в двух таблицах
 
 автор: Albatros   (27.07.2009 в 12:03)   письмо автору
 
 

Добрый день.

Нужно организовать поиск по двум таблицам, условно news и articles. По полям с заголовками. Поля эти в обеих таблицах называются одинаково - header. Очевидный вроде-бы запрос:

SELECT * FROM news, articles WHERE news.header LIKE '%слово%' OR articles.header LIKE '%слово%'


выводит дублирующие записи. Попытка осуществить этот запрос со стометровими таблицами привела к зависанию. Подскажите как написать запрос не разбивая его на два

  Ответить  
 
 автор: cheops   (27.07.2009 в 12:12)   письмо автору
 
   для: Albatros   (27.07.2009 в 12:03)
 

Структура таблиц news и articles одинаковая? Может проще UNION приспособить? У вас связи между таблицами в запросе нет, а таблицы декартово перемножаются - в таких условиях два отдельных запроса будут исполняться многократно быстрее.

  Ответить  
 
 автор: Albatros   (27.07.2009 в 12:24)   письмо автору
 
   для: cheops   (27.07.2009 в 12:12)
 

нет, структура разная, некоторые поля только имеют одинаковые названия. А как приспособить UNION ? - Как вы правильно сказали - связей между таблицами не существует и полей по которым их можно было бы связять вроде бы нет.

  Ответить  
 
 автор: Valick   (27.07.2009 в 12:53)   письмо автору
 
   для: Albatros   (27.07.2009 в 12:24)
 

А как приспособить UNION ?
я думаю можно попробовать 2 вложенных запроса SELECT (врезультете выборки, чтобы получились одинаковые таблицы) во FROM объединённых UNION и уже из всего этого искать LIKE
но это смотря какой результат нужен, с индексами мне кажется заморочь получиться.

  Ответить  
 
 автор: Albatros   (27.07.2009 в 13:33)   письмо автору
 
   для: Valick   (27.07.2009 в 12:53)
 

спасибо. Пойду пробовать

  Ответить  
 
 автор: Valick   (27.07.2009 в 13:59)   письмо автору
 
   для: Albatros   (27.07.2009 в 13:33)
 

лучше два простых запроса, чем один пятиэтажный

  Ответить  
 
 автор: Eugene77   (27.07.2009 в 12:23)   письмо автору
 
   для: Albatros   (27.07.2009 в 12:03)
 

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

  Ответить  
 
 автор: Albatros   (27.07.2009 в 12:27)   письмо автору
 
   для: Eugene77   (27.07.2009 в 12:23)
 

Каким образом?
Это же полнотекстовый поиск.

  Ответить  
 
 автор: Рома   (27.07.2009 в 12:40)   письмо автору
 
   для: Albatros   (27.07.2009 в 12:27)
 

Индексировать поля можно не только текстовые. В одной таблице можно проиндексировать до 32 полей. Другими словами, можно смело проиндексировать все те поля, по которым выбираются или сортируются данные. Хуже от этого не будет. Я думаю.

  Ответить  
 
 автор: Trianon   (27.07.2009 в 13:40)   письмо автору
 
   для: Рома   (27.07.2009 в 12:40)
 

>Другими словами, можно смело проиндексировать все те поля, по которым выбираются или сортируются данные. Хуже от этого не будет. Я думаю.

Неправильно думаете.
Индексы занимают место (в некоторых случаях даже большее, чем сами записи таблицы).
А операции добавления / удаления /изменения строк занимают время, необходимое для внесения изменений в затрагиваемые индексы.

Это не к тому, что индексы ставить плохо.
А к тому, что делать это нужно осмысленно, а не в ключе "хуже не будет".

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования