Page 1 of 1

Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 11:36 am
by masterok
Здравствуйте, уважаемые коллеги!
Подскажите, как решить следующую проблему:
Я скомбинировал CompanyDirectory и Products в один модуль, получив в итоге замечательную штуку для каталога объектов недвижимости.
Но возникла одна существеннаяч проблема: по всей базе модуля поиск происходит влет, а вот разделить поиск по разделам и категориям не удается.
Я плаваю в вопросах выборки информации из сопряженных таблиц mySQL, увы...
Подскажите, в каком направлении копать?

Если понадобится, скину листинги, только помогите, пожалуйста!

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 12:09 pm
by Fenik17
Копать в направлении SQL-запросов. INNER JOIN + WHERE.

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 12:16 pm
by Fenik17
Таблица связи товара с категориями - cms_module_products_product_categories.
К примеру, чтобы выбрать все товары с категорией 3 (идентификатор категории), нужен примерно такой запрос:

Code: Select all

SELECT * FROM cms_module_products p
  JOIN cms_module_products_product_categories pc
   ON (pc.category_id = 3) AND (p.id = pc.product_id);

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 12:17 pm
by masterok
Вот у меня есть аналог:
из таблицы cms_module_tenures извлекается следующая инфа:

Code: Select all

if( !empty($gas_expr) )
	{
	$where[] = 'P.gas REGEXP ?';
	$qparms[] = $gas_expr;
	}
Но эти данные извлекаются из основной таблицы, а у меня есть таблица
cms_module_tenures_tenure_categories
как мне извлечь из нее?

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 12:21 pm
by masterok
Можно показать листинг do_search? Что-то никак не получается, уже две недели кручу.

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 12:23 pm
by Fenik17
masterok wrote: Вот у меня есть аналог:
из таблицы cms_module_tenures извлекается следующая инфа:

Code: Select all

if( !empty($gas_expr) )
	{
	$where[] = 'P.gas REGEXP ?';
	$qparms[] = $gas_expr;
	}
Но эти данные извлекаются из основной таблицы, а у меня есть таблица
cms_module_tenures_tenure_categories
как мне извлечь из нее?
Не знаю, как в вашем коде что устроено. Возможно запрос придется формировать вручную.
И вместо REGEXP желательно использовать LIKE.

Можно показать листинг do_search? Что-то никак не получается, уже две недели кручу.
Можно. Если большой - лучше как прикрепленный файл.

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 12:31 pm
by masterok
Работающий файл do_search, в который никак не могу запихнуть сортировку по иерархии и категории. Мои таблицы:
cms_module_tenures
cms_module_tenures_categories
cms_module_tenures_category_fields
cms_module_tenures_hierarchy
cms_module_tenures_tenure_categories
cms_module_tenures_tenurtohier

NB! Очень благодарен Вам за внимание!!!

Re: Проблема поиска внутри категорий

Posted: Thu Oct 14, 2010 2:07 pm
by masterok
Коллеги, а может быть мне проще заставить поиск работать внутри раздела и категории по принципу:

Code: Select all

{cms_module module='Модуль' hierarchy='значение раздела' category='значение категории'}
Но беда в том, что изначально у функции поиска нет такой возможности, как его заставить так работать, по аналогии с action.default.php ?

Re: Проблема поиска внутри категорий

Posted: Fri Oct 15, 2010 9:13 am
by Fenik17
Трудно в коде разобраться, не зная, как всё там устроено. Но, подозреваю, что необходимо в условии

if( !empty($searchdata) )

добавить

    $joins[] = 'JOIN '.cms_db_prefix().'module_tenures_tenure_categories TC ON P.id = TC.tenure_id';

и условие

    $where[] = '(TC.category_id IN список_идентификаторов_категорий_для_поиска)';

Re: Проблема поиска внутри категорий

Posted: Fri Oct 15, 2010 10:11 am
by masterok
Да, верно! Я не догадался использовать всю серчдату.
Спасибо огромное!