Здравствуйте.
Если вы не хотите показывать товары в каталогах при обнаружении у них нулевой либо отрицательной цены определенного типа(для определенной группы покупателей), то можно создать следующие триггеры, которые соответственно после операций обновления, добавления, удаления цен для товара подсчитывают значение цены определенного рода(для определенной группы покупателей) и снимают товар с публикации либо возвращают его к публикации, если цена положительная.
Для этого надо например в phpMyAdmin исполнить следующий SQL:
DELIMITER ;
USE имя_вашей_БД;
DROP TRIGGER IF EXISTS имя_вашей_БД.`after_update_price`;
DELIMITER $$
CREATE
DEFINER = CURRENT_USER
TRIGGER имя_вашей_БД.after_update_price
AFTER UPDATE
ON antilopa.ytgb1_virtuemart_product_prices
FOR EACH ROW
BEGIN
SET @total_retail_price = 0;
SET @id = NEW.virtuemart_product_id;
SET @total_retail_price = IFNULL((SELECT
SUM(IFNULL(product_price, 0))
FROM `ytgb1_virtuemart_product_prices`
WHERE virtuemart_product_id = @id AND virtuemart_shoppergroup_id = 0),0);
IF @total_retail_price <= 0 THEN
UPDATE ytgb1_virtuemart_products
SET published = 0
WHERE virtuemart_product_id = NEW.virtuemart_product_id;
ELSEIF @total_retail_price > 0 THEN
UPDATE ytgb1_virtuemart_products
SET published = 1
WHERE virtuemart_product_id = NEW.virtuemart_product_id;
END IF;
END
$$
DROP TRIGGER IF EXISTS имя_вашей_БД.`after_insert_price`
$$
CREATE
DEFINER = CURRENT_USER
TRIGGER имя_вашей_БД.after_insert_price
AFTER INSERT
ON имя_вашей_БД.ytgb1_virtuemart_product_prices
FOR EACH ROW
BEGIN
SET @total_retail_price = 0;
SET @id = NEW.virtuemart_product_id;
SET @total_retail_price = IFNULL((SELECT
SUM(IFNULL(product_price, 0))
FROM `ytgb1_virtuemart_product_prices`
WHERE virtuemart_product_id = @id AND virtuemart_shoppergroup_id = 0),0);
IF @total_retail_price <= 0 THEN
UPDATE ytgb1_virtuemart_products
SET published = 0
WHERE virtuemart_product_id = NEW.virtuemart_product_id;
ELSEIF @total_retail_price > 0 THEN
UPDATE ytgb1_virtuemart_products
SET published = 1
WHERE virtuemart_product_id = NEW.virtuemart_product_id;
END IF;
END
$$
DROP TRIGGER IF EXISTS имя_вашей_БД.`after_delete_price`
$$
CREATE
DEFINER = CURRENT_USER
TRIGGER имя_вашей_БД.after_delete_price
AFTER DELETE
ON antilopa.ytgb1_virtuemart_product_prices
FOR EACH ROW
BEGIN
SET @total_retail_price = 0;
SET @id = OLD.virtuemart_product_id;
SET @total_retail_price = IFNULL((SELECT
SUM(IFNULL(product_price, 0))
FROM `ytgb1_virtuemart_product_prices`
WHERE virtuemart_product_id = @id AND virtuemart_shoppergroup_id = 0),0);
IF @total_retail_price <= 0 THEN
UPDATE ytgb1_virtuemart_products
SET published = 0
WHERE virtuemart_product_id = OLD.virtuemart_product_id;
ELSEIF @total_retail_price > 0 THEN
UPDATE ytgb1_virtuemart_products
SET published = 1
WHERE virtuemart_product_id = OLD.virtuemart_product_id;
END IF;
END
$$
DELIMITER ;
Создавалось под VM 2.0.18a
Будьте внимательны, заменяя имя_вашей_БД на свою, префиксы таблиц (ytgb1_) на используемые у вас, а также указывая свой virtuemart_shoppergroup_id в условиях SELECT'a