Нууу тут получается тебе надо достать все свойства товаров для конкретной категории, посчитать их количество, предварительно сгруппировав по id свойства и далее взять лишь те, где количество равно единице. Выглядит достаточно просто. Но возможно я не правильно понял условие задачи
Как вариант, можно заюзать условие OR. Но в данном случае вам придётся дважды передавать один и тот же id в запрос. Получится что-то подобное этому: SELECT * FROM tabletest WHERE id=? OR '*'=?
Конечно же триггер. Реализация на уровне app плоха тем, что любое другое ваше app, которое возможно появится в будущем, должно будет реализовать эту фичу. Зайдя "руками" в базу и изменив данные о пользователях у вас не останется истории. А вот использование триггеров решает это
SET @all_sum = 0;
SELECT `date`,`count`,`sum` FROM (
SELECT *, @all_sum:=@all_sum + `sum` AS mysum FROM `table` ORDER BY `date` DESC
) t
WHERE mysum < 5000;