Когда вы добавляете ИЛИ в конец (при условии, что вы добавляете его после последнего парена), вы создаете декартово объединение, так как вы аннулируете условия JOIN, которые вы поместили в предложение WHERE (p.products_id = pd.products_id
,p.products_id = p2c.products_id
и p2c.categories_id = c.categories_id
).Кроме того, почему вы помещаете начальные таблицы (продукты, производители, products_description, Categories, products_to_categories) в круглые скобки?Вместо этого попробуйте что-то более похожее на это:
SELECT count(distinct p.products_id) as total
FROM products p
LEFT JOIN manufacturers m USING(manufacturers_id)
LEFT JOIN products_description pd using products_id
LEFT JOIN categories c USING (categories_id)
LEFT JOIN products_to_categories p2c USING (products_id)
LEFT JOIN meta_tags_products_description mtpd
ON mtpd.products_id= p2c.products_id
AND mtpd.language_id = 1
WHERE (p.products_status = 1
AND pd.language_id = 1
AND (
(pd.products_name LIKE '%3220%'
OR p.products_model LIKE '%3220%'
OR m.manufacturers_name LIKE '%3220%'
OR (mtpd.metatags_keywords LIKE '%3220%'
AND mtpd.metatags_keywords !='')
OR
(mtpd.metatags_description LIKE '%3220%'
AND mtpd.metatags_description !='')
OR
pd.products_description LIKE '%3220%'
)
)
)
OR (p.products_id=3220)
Я не понимаю, что означает p.products_status = 1 AND pd.language_id = 1
в вашем случае, поэтому вам, возможно, придется скорректировать, как они включены в JOIN.