Реализована возможность динамического создания полей характеристик для товара. Задача: Сделать фильтр по характеристикам. Почти все сделал. Но есть одна проблемка. Выводит товары в характеристиках которых, есть хотя бы одно совпадение. То есть, если я выбираю АВТО - выводит все товары которые являются АВТО, потом я выбираю КРАСНЫЕ - выводит опять же все товары АВТО + КРАСНЫЕ. А, например, АВТО СИНИЕ выводятся тоже.
Запрос:
$item = mysql_query("SELECT DISTINCT `id_item` FROM `x-ka` WHERE (id_pole, value) in ($in)");
Где in - значения, которые создаются при запросе, так как заранее нельзя определить все возможные поля характеристик.
Буду благодарен за любую полезную информацию.
SELECT `id_item`
FROM `x-ka`
WHERE (id_pole, value) in ($in)
GROUP BY `id_item`
HAVING COUNT(`id_item`) = $pairs_count_in_$in
судя по описанию, у вас все характеристики — в одной таблице. и в ней явно присутствует ещё и идентификатор товара.
значит, для выборки идентификаторов товаров, у которых совпадают характеристики, надо использовать объединения (join).
вот ориентировочные примеры для двух и трёх совпадающих характеристик:
SQL Fiddle
MySQL 5.6 Schema Setup:
create table x (id int, tovar int, name text);
insert into x (id, tovar, name) values
(0, 1, 'авто')
,(1, 1, 'красные')
,(2, 1, 'длинные')
,(3, 2, 'авто')
,(4, 2, 'синие')
,(5, 2, 'длинные')
,(6, 3, 'авто')
,(7, 3, 'красные')
,(8, 3, 'короткие')
;
Query 1:
/* для двух характеристик */
select x1.tovar from x x1
left join x x2 on
x2.tovar = x1.tovar and x2.id <> x1.id
where
x1.name = 'авто' and x2.name = 'красные'
Results:
| tovar |
|-------|
| 1 |
| 3 |
Query 2:
/* для трёх характеристик */
select x1.tovar from x x1
left join x x2 on
x2.tovar = x1.tovar and x2.id <> x1.id
left join x x3 on
x3.tovar = x1.tovar and x3.id <> x1.id
where
x1.name = 'авто' and x2.name = 'красные' and x3.name = 'длинные'
Results:
| tovar |
|-------|
| 1 |
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости