Я видел несколько сообщений на эту тему, но я не вижу ни одной, которая отвечала бы на мой вопрос.
По сути, в моей базе данных есть 3 таблицы, которые относятся к членам и их категоризации / классификации.
- членов (определяет список членов и связанных данных)
- member_taxonomy (определяет категории, подкатегории и объекты, используя комбинацию идентификатора участника и перечисляемого поля tax_type (CATEGORY, SUBCATEGORY, FACILITY)
- member_taxonomy_map (определяет отображение между членами и member_taxonomy)
У меня есть страница участников, на которой есть несколько вариантов для уточнения поиска, указав одну или несколько подкатегорий и одну или несколько возможностей. Я пытался найти в таблице, используя запрос:
SELECT members.*
FROM (members)
JOIN member_taxonomy_map ON member_taxonomy_map.member_id = members.id
WHERE member_taxonomy_map.taxonomy_id = 1
AND member_taxonomy_map.taxonomy_id = 26
AND members.active = 1
AND members.deleted = 0;
Однако это возвращает 0 строк, что связано с наличием нескольких выражений where в одном столбце, но я не могу понять, как должен выглядеть этот запрос. Каждый раз, когда поиск уточняется (и может быть до 30 различных вариантов для уточнения поиска), мне нужно добавить дополнительное предложение AND, чтобы возвращались только элементы с этими сопоставлениями.
Предложение IN не будет работать, поскольку оно эффективно возвращает любые строки, которые соответствуют любому из этих конкретных значений, но это неверно, поскольку оно должно точно соответствовать указанным значениям.
Надеюсь, кто-нибудь может дать мне несколько указателей в правильном направлении.
Заранее спасибо.
UPDATE
Возможно, что taxonomy_id может быть 1 и 26. Возможно, мне нужно включить схему для таблицы members_taxonomy_map.
id int
tax_name varchar
slug varchar
tax_type enum ('CATEGORY','CLASSIFICATION','FACILITY','RATING')
parent_id int
active int
Следовательно, любой tax_type без установленного родительского идентификатора относится к категории CATEGORY верхнего уровня. У подкатегорий есть parent_id CATEGORY. КЛАССИФИКАЦИЯ может иметь parent_id для CATEGORY, а FACILITY иметь parent_id для CATEGORY.
Поэтому, например, категория может быть размещением, подкатегория - гостиницей, а объект - Wi-Fi. Поэтому, если у участника есть все три из этих элементов, они будут иметь 3 записи в таблице сопоставления. Мне нужно иметь возможность фильтровать их так, чтобы он формировал запрос для фильтрации в зависимости от типов размещения (т. Е. Подкатегорий - те записи с таксоном типа CATEGORY, но также имеющие родительский идентификатор, а затем в рамках этой классификации. Запрос может вернуть несколько записей для одного и того же члена, но я могу решить эту проблему, отфильтровав их с помощью дополнительных предложений SQL.