SELECT
SQL_CALC_FOUND_ROWS products.product_id,
descr1.product as product,
companies.company as company_name,
MIN(
IF(
prices.percentage_discount = 0,
prices.price,
prices.price - (
prices.price * prices.percentage_discount
)/ 100
)
) as price,
products.product_type,
products.parent_product_id,
products.master_product_offers_count,
products.master_product_id,
products.company_id,
IF(
products.age_verification = 'Y',
'Y',
IF(
cscart_categories.age_verification = 'Y',
'Y', cscart_categories.parent_age_verification
)
) as need_age_verification,
IF(
products.age_limit > cscart_categories.age_limit,
IF(
products.age_limit > cscart_categories.parent_age_limit,
products.age_limit, cscart_categories.parent_age_limit
),
IF(
cscart_categories.age_limit > cscart_categories.parent_age_limit,
cscart_categories.age_limit, cscart_categories.parent_age_limit
)
) as age_limit,
1 as instock_marker,
IF(
products.product_type = 'C',
(
SELECT
MAX(amount)
FROM
cscart_products
WHERE
parent_product_id = products.product_id
) > 0,
IF(
IF(
products.tracking = 'O',
(
SELECT
MAX(amount)
FROM
cscart_product_options_inventory s_inventory
WHERE
s_inventory.product_id = products.product_id
) > 0,
products.amount > 0
),
1,
IF(products.tracking = 'D', 1, 0)
)
) as instock_sorting
FROM
cscart_products as products
LEFT JOIN cscart_product_descriptions as descr1 ON descr1.product_id = products.product_id
AND descr1.lang_code = 'en'
LEFT JOIN cscart_product_prices as prices ON prices.product_id = products.product_id
AND prices.lower_limit = 1
LEFT JOIN cscart_companies AS companies ON companies.company_id = products.company_id
INNER JOIN cscart_products_categories as products_categories ON products_categories.product_id = products.product_id
INNER JOIN cscart_categories ON cscart_categories.category_id = products_categories.category_id
AND (
cscart_categories.usergroup_ids = ''
OR FIND_IN_SET(
0, cscart_categories.usergroup_ids
)
OR FIND_IN_SET(
1, cscart_categories.usergroup_ids
)
)
AND cscart_categories.status IN ('A', 'H')
AND cscart_categories.storefront_id IN (0, 3)
LEFT JOIN cscart_warehouses_sum_products_amount as war_sum_amount ON war_sum_amount.product_id = products.product_id
LEFT JOIN cscart_product_required_products ON products.product_id = cscart_product_required_products.required_id
WHERE
1
AND (
companies.status IN ('A', 'S')
OR products.company_id = 0
)
AND (
products.usergroup_ids = ''
OR FIND_IN_SET(0, products.usergroup_ids)
OR FIND_IN_SET(1, products.usergroup_ids)
)
AND products.status IN ('A')
AND prices.usergroup_id IN (0, 0, 1)
AND products.master_product_status IN ('A')
AND cscart_product_required_products.product_id = 276701
AND products.product_type != 'D'
GROUP BY
products.product_id
ORDER BY
instock_sorting DESC,
price asc,
products.product_id ASC