Реализована возможность динамического создания полей характеристик для товара. Задача: Сделать фильтр по характеристикам. Почти все сделал. Но есть одна проблемка. Выводит товары в характеристиках которых, есть хотя бы одно совпадение. То есть, если я выбираю АВТО - выводит все товары которые являются АВТО, потом я выбираю КРАСНЫЕ - выводит опять же все товары АВТО + КРАСНЫЕ. А, например, АВТО СИНИЕ выводятся тоже.
Запрос:
$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 |
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Работаю с картами, как изначально проставить zoom(примерно так, чтоб было видно только тот город, в котором расположены эти маркеры)?
Всем приветЯ новичок в андроиде, поэтому много чего еще не понимаю
Как читать посимвольно из textarea сразу после введение символов в textarea в java? те