EXPLAIN SELECT
p.product_id as p_id,
p.gift,
p.alcohol,
p.status as product_status,
p.portion_in_biso,
SUM(IF(p.is_organic = 1 AND sc.certification_id = 1, 1, 0)) as is_organic,
SUM(IF(p.is_organic_USDA = 1 AND sc.certification_id = 2, 1, 0)) as is_organic_USDA,
SUM(IF(p.is_scs_certified = 1 AND sc.certification_id = 3, 1, 0)) as is_scs_certified,
p.conservation_mode_in_basket as b_con,
p.visible_on_marketplace as vis,
CONVERT(TRUNCATE(pi.default_price, 2 ),DECIMAL(7,2)) as price,
p.units,
p.unit_of_measure as unit,
IF(p.trial_product = 0, pi.is_new, 0) as is_new,
pi.is_featured AS featured,
pi.super_featured,
pi.products_inventory_is_top_new AS is_top_new,
p.trial_product as is_trial_product,
IF(p.product_id = 7386 OR p.product_id = 12230, 1, 0) AS is_free_tote,
IF(p.nutritional_values_status = 4, 1, IF(p_n_v_g_b_a.product_id IS NOT NULL, 2, NULL)) AS nutrional_status_published,
p.name AS p_name,
sub.name AS sub_na,
cat.name AS cat_na,
sp.name AS s_name,
pdr.description as d_des,
IFNULL(mpt.marketplace_product_tag_card_label_fr, "") AS card_tag, p.supplier_id as s_id,
p.image_url AS image_url,
IF(pi.super_featured = 1 AND p.super_aubaines_image_url IS NOT NULL, p.super_aubaines_image_url, 0) AS super_aubaines_image_url,
attributes.attr,
IFNULL(his_favorites.favorite, 0) AS favorite_product,
IF(in_his_basket.defined_retail_price_per_unit_for_default_weight = 0 OR in_his_basket.defined_retail_price_per_unit_for_default_weight IS NULL,
CONVERT(TRUNCATE(pi.current_price, 2 ),DECIMAL(7,2)), CONVERT(TRUNCATE(in_his_basket.defined_retail_price_per_unit_for_default_weight, 2), DECIMAL(7,2))
) AS current_price,
p.weight,
p.is_customizable,
p.charge_by_weight as c_wei,
IF(cat.category_id IN (272, 270) AND p.conservation_mode_in_basket IN (0,1), 1, 0) as rinse,
p.group_type,
cat.category_id,
sub.subcategory_id,
IFNULL(mp.average, sp.average) as avg_r,
IFNULL(mcom.comment_count, scom.comment_count) as c_cou,ROUND(p.average_price_quantity/p.weight*IFNULL(in_his_basket.defined_retail_price_per_unit_for_default_weight,pi.current_price),2) as avg_p_p,
ROUND(p.average_price_quantity/p.weight*p.price,2) as avg_p_p_r,
p.average_price_quantity as avg_p_q,
apu.average_price_unit as avg_p_u,
COUNT(DISTINCT in_his_basket.order_details_id) as nbr_in_basket,
product_families.families AS t1,
supplier_families.families AS t2,
subcategory_families.families AS t3,
category_families.families AS t4,
Concat(false) AS inBasket,
child.sub_products,
base.default_quantity,
CASE WHEN r_prod.recipe_id IS NOT NULL
THEN 1
ELSE 0
END AS bool_is_in_recipe
FROM
products AS p
LEFT JOIN
suppliers_certifications sc ON sc.supplier_id = p.supplier_id AND sc.status = 1
LEFT JOIN (
SELECT
od.product_id,
od.defined_retail_price_per_unit_for_default_weight,
od.order_details_id
FROM
order_details od
WHERE
od.order_id = 0
GROUP BY
od.product_id
) in_his_basket ON (in_his_basket.product_id = p.product_id)
LEFT JOIN (
SELECT
product_id
FROM
products_nutritional_values_generated_by_ai
GROUP BY
product_id
) p_n_v_g_b_a ON (p_n_v_g_b_a.product_id = p.product_id)
LEFT JOIN (
SELECT
recipeIngredients.recipe_id,
recipeIngredients.product_id
FROM
recipeIngredients
INNER JOIN products ON (products.product_id = recipeIngredients.product_id AND products.status = 1)
WHERE
recipe_id IN (SELECT recipe_id FROM recipes WHERE status = 1)
) as r_prod ON r_prod.product_id = p.product_id
INNER JOIN suppliers AS sp ON p.supplier_id = sp.supplier_id
INNER JOIN products_inventory AS pi ON (pi.product_id = p.product_id AND pi.inventory_date = '2025-04-12' AND (pi.quantity > 0 OR p.group_type = 1 OR in_his_basket.product_id > 0 OR r_prod.recipe_id > 0 OR p.product_id IN (3210,3211,11177,12218,12219,12220,12221,12222,12223,12224,12225,12226,12227,12228,12233,12234,12235,12237,12238,12241,12242,12243,12244,12245,12246,13078,15659,16517,16518,16519,16974,16975,16976,19121, 0, 0)))
LEFT JOIN product_discount_reasons pdr ON pdr.product_discount_reason_id = pi.product_discount_reason_id
LEFT JOIN productSubSubCategories subsub ON subsub.sub_sub_id = p.sub_sub_id
LEFT JOIN productSubCategories sub ON sub.subcategory_id = subsub.subcategory_id
LEFT JOIN product_categories cat ON cat.category_id = sub.category_id
LEFT JOIN average_price_units apu ON apu.average_price_unit_id = p.average_price_unit_id
LEFT OUTER JOIN productsLang AS pl ON p.product_id = pl.product_id
LEFT JOIN productSubCategoriesLang subLang ON subLang.subcategory_id = sub.subcategory_id
LEFT JOIN productCategoriesLang catLang ON catLang.category_id = cat.category_id
INNER JOIN suppliersLang AS spLang ON sp.supplier_id = spLang.supplier_id
LEFT JOIN product_discount_reasonsLang pdrl ON pdrl.product_discount_reason_id = pdr.product_discount_reason_id AND pdrl.lang_id = 'fr'
LEFT JOIN (
SELECT product_id, if('fr' = 'fr',GROUP_CONCAT(mf.title separator ';'),GROUP_CONCAT(mfLang.l_title separator ';')) AS families FROM marketplace_family_product mfp
LEFT JOIN marketplace_families mf ON mf.marketplace_family_id = mfp.marketplace_family_id AND mf.title != ''
LEFT JOIN marketplace_families_lang mfLang ON mf.marketplace_family_id = mfLang.marketplace_family_id
WHERE mf.status = 1
GROUP BY mfp.product_id
) product_families ON product_families.product_id = p.product_id
LEFT JOIN (
SELECT supplier_id, if('fr' = 'fr',GROUP_CONCAT(mf.title separator ';'),GROUP_CONCAT(mfLang.l_title separator ';')) as families FROM marketplace_family_supplier mfs
LEFT JOIN marketplace_families mf ON mf.marketplace_family_id = mfs.marketplace_family_id AND mf.title != ''
LEFT JOIN marketplace_families_lang mfLang ON mf.marketplace_family_id = mfLang.marketplace_family_id
WHERE mf.status = 1
GROUP BY mfs.supplier_id
) supplier_families ON supplier_families.supplier_id = p.supplier_id
LEFT JOIN (
SELECT subcategory_id, if('fr' = 'fr',GROUP_CONCAT(mf.title separator ';'),GROUP_CONCAT(mfLang.l_title separator ';')) AS families FROM marketplace_family_subcategory mfsc
LEFT JOIN marketplace_families mf ON mf.marketplace_family_id = mfsc.marketplace_family_id AND mf.title != ''
LEFT JOIN marketplace_families_lang mfLang ON mf.marketplace_family_id = mfLang.marketplace_family_id
WHERE mf.status = 1
GROUP BY mfsc.subcategory_id
) subcategory_families ON subcategory_families.subcategory_id = subsub.subcategory_id
LEFT JOIN (
SELECT category_id, if('fr' = 'fr',GROUP_CONCAT(mf.title separator ';'),GROUP_CONCAT(mfLang.l_title separator ';')) AS families FROM marketplace_family_category mfc
LEFT JOIN marketplace_families mf ON mf.marketplace_family_id = mfc.marketplace_family_id AND mf.title != ''
LEFT JOIN marketplace_families_lang mfLang ON mf.marketplace_family_id = mfLang.marketplace_family_id
WHERE mf.status = 1
GROUP BY mfc.category_id
) category_families ON category_families.category_id = sub.category_id
LEFT JOIN (
SELECT
product_id,
1 AS favorite
FROM favorites
WHERE user_id = -1
) as his_favorites ON his_favorites.product_id = p.product_id
LEFT JOIN (SELECT product_id, ROUND(AVG(rating),0) AS average
FROM product_user_ratings pur
INNER JOIN (SELECT owner_id, user_id, status, parent_comment_id FROM user_comments) uc
ON (pur.user_id = uc.user_id AND pur.product_id = uc.owner_id)
WHERE pur.updated_at >= SUBDATE(CURDATE(), INTERVAL 180 DAY) AND uc.status = 1 AND IFNULL(uc.parent_comment_id, 0) = 0
GROUP BY product_id
) sp ON (sp.product_id = p.product_id)
LEFT JOIN (SELECT product_group_relations.parent_id, ROUND(AVG(rating),0) AS average
FROM (SELECT pur.*, uc.status, uc.parent_comment_id FROM product_user_ratings pur INNER JOIN (SELECT owner_id, user_id, status, parent_comment_id FROM user_comments) uc ON (pur.user_id = uc.user_id AND pur.product_id = uc.owner_id)) inter
JOIN product_group_relations ON (product_group_relations.child_id = inter.product_id)
WHERE inter.updated_at >= SUBDATE(CURDATE(), INTERVAL 180 DAY) AND inter.status = 1 AND IFNULL(inter.parent_comment_id, 0) = 0
GROUP BY product_group_relations.parent_id
) mp ON (mp.parent_id = p.product_id)
LEFT JOIN (SELECT owner_id, COUNT(*) AS comment_count
FROM user_comments
WHERE `owner_name` = 'Product' AND status = 1
GROUP BY owner_id
) scom ON (scom.owner_id = p.product_id)
LEFT JOIN (SELECT product_group_relations.parent_id, GROUP_CONCAT(product_group_relations.child_id ORDER BY CAST(sortedchildrenbyweight.weight AS unsigned), sortedchildrenbyweight.name separator ';') AS sub_products
FROM product_group_relations
LEFT JOIN (SELECT product_id, weight, name FROM products ORDER BY weight ASC) AS sortedchildrenbyweight ON (sortedchildrenbyweight.product_id = product_group_relations.child_id)
GROUP BY product_group_relations.parent_id
) as child ON child.parent_id = p.product_id
LEFT JOIN (SELECT product_group_relations.parent_id, COUNT(*) AS comment_count FROM user_comments
JOIN product_group_relations ON product_group_relations.child_id = user_comments.owner_id
WHERE `owner_name` = 'Product' AND status = 1
GROUP BY product_group_relations.parent_id
) mcom ON (mcom.parent_id = p.product_id)
LEFT JOIN marketplace_product_tag mpt ON (mpt.marketplace_product_tag_product_id = p.product_id AND '2025-04-12' BETWEEN mpt.marketplace_product_tag_start_date AND mpt.marketplace_product_tag_end_date)
LEFT JOIN (
SELECT product_id, default_quantity, basket_design_id
FROM basket_design_product_availability
WHERE basket_design_id IN
(SELECT basket_design_id
FROM orders
WHERE order_id = 0)
AND default_quantity > 0
) base ON base.product_id = p.product_id
LEFT JOIN basket_designs bs ON bs.basket_design_id = base.basket_design_id LEFT JOIN (SELECT product_id,GROUP_CONCAT(attribute_value,'##',attribute_name separator '|') AS attr
FROM product_attributes pa
GROUP by product_id
) as attributes ON attributes.product_id = p.product_id
WHERE
(p.trial_product = 0 OR bs.basket_id = 10) AND
p.preference_restriction IN ('All markets','Vegan') AND
p.restricted_to_lufa IN (0) AND
(p.status = 1 OR (p.status = 0 AND p.gift = 1))
OR in_his_basket.product_id > 0 OR r_prod.recipe_id > 0 OR p.product_id IN (3210,3211,11177,12218,12219,12220,12221,12222,12223,12224,12225,12226,12227,12228,12233,12234,12235,12237,12238,12241,12242,12243,12244,12245,12246,13078,15659,16517,16518,16519,16974,16975,16976,19121, 0, 0)
GROUP BY
p.product_id
ORDER BY
cat.weight ASC, sub.weight ASC, subsub.weight ASC,sp.weight DESC, p.name