в продолжении темы делаем разбор :
1)table jos_sobi2_item
itemid - ид записей в соби
2)таблица : jos_sobi2_fields_data
fieldid -ид поля (характеристики)
itemid -ид записи фирмы
3)таблица : jos_sobi2_fields
fieldid -ид поля (хорактеристики)
fieldType -тип поля (хорактеристики)
6 - чекбокс (можно отметить несколько чеков)
5 -селект лист (зарание забитые хорактеристики выбор только одной)
4)таблица : jos_sobi2_cat_items_relations
catid -ид категории (подкатегории)
itemid -ид записи
5)таблица : jos_sobi2_language
алгоритм
нужно создать 2 типа поиска
1) с кнопкой найти (помимо селект групп выводится чекбоксы)
2)без кнопки найти ( в выбор хорактеритик входит поиск только по селект группам
с формированием ссылки на количество найденых обьектов с помощью технологии аякс)
1) поехали!
<?php
делаем в 2 этапа
1)человек выбирает главную категорию (тип заведния)
далее с помощью ааякса делаем выборку из базы данных
выборку делаем из таблицы 4)таблица : jos_sobi2_cat_items_relations здесь делаем запрос каким записям присвоен catid выбранный человеком
выводим массив itemid каторые присвоины данной категории заданной человеком
далее обращаемся к таблице 2)таблица : jos_sobi2_fields_data здесь мы запрашиваем какой в какой строчке для полученных itemid
имеются поля типа 5(селект листы), и получаем массив значений столбца data_txt
далее делаем запрос к 5таблице : jos_sobi2_language и там делаем выборку значений где langKey= строчке массива полученных из столбца data_txt
далее грузим в селект группу полученные значения :
<select size="1" name="">
</select>$langValue<select size="1" name="$langKey">
</select>
естественно спомощью аякса

также выводим кнопу далее чтобы перейти на 2-ю страницу расширенного поиска где мы будем фильтровать
чекбоксы
при этом мы уже будем иметь заданные параметры (выбранная категория и выбранные селект группы (их значения))
и так мы получили 1-ю страницу развёрнутого поиска
человек выбрав какуюто категорию получет в селект группе только те значения селект полей к которым привязаны определённые записи (фирмы) соответсвующие данной категории выбранной человеком
2-й этап (фильтр для чекбоксов)
на этом этапе заказчик задал очень большое колличество чекбоксов
при этом клиенту недолжно выдаваться пустое значение
(хотябы одна запись должна быть)
и чем больше % совпадений хоратеристик фирмы с выбранными чекбоксами(пользователя)
тем выше эта фирма должны быть в списке выдачи (результате поиска)
поэтому для каждого чекбокса надо проводить выборку из базы для каждой фирмы
после чего фирма получившая максимальное колличество балов будет выведена в верхушку выдачи
пчём нужно учеть что фирмы удовлетворяющие всем группам чекбоксов выходят в первую десятку в выдаче
тоесть фирме начисляется 2-й индекс
1) соттветствие всем группам чекбоксов отмеченных человеком дадим этому индексу название массив $VIP
в этом массиве мы мы распологаем фирмы в таком порядке:
название фирмы---колличество совпавших групп чекбоксов---общее колличество совпадений по всем чекбаксам всехгрупп чеков
фирма А --- 6 --- 56
фирма А --- 5 --- 100
понимаю чистая математика и логика

вобщем
делим данный масив по системе ABS (6,5,4,3,2,1)
на 6 массивов это будут массивы приоритетов попадания в максимальное колличество чек групп
каждый массыив надо обработать
тоже по системе ABS
и при нажатии клавиши найти выдавать в порядке уменьшения
сначало (впервую десятку выводим те фирмы которые попали в максимальное колличество групп чекбоксов)
сортируем по возрастанию
итд. согласно возрастанию индекса попадания в группы
всё это добро выводим на экран

вобщем получилось громоздко но чётко

если среди вас сеть великие логики то может поможете оптимизировать данную схему?
далее от теории к алгоритму выборки из базы данных:
нажав кнопу далее человек уже определился с направлением деятельности фирмы и местом её располдожения (городом или областью)
эти параметры передаются на вход данной части скрипта
и скрипт определяет какие фирмы под данную деятельность и место расположение попадают
итак получем параметр :
массив itemid (все иды фирм прошедших отбор)
далее человек начинает проставлять галочки в чекбоксах
для наглядности рисунок
![]()