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
Да, верно! Я не догадался использовать всю серчдату.
Спасибо огромное!