我有这个运行良好的查询:
SELECT count(distinct p.products_id) as total
FROM (products p
LEFT JOIN manufacturers m
USING(manufacturers_id), products_description pd,
categories c, products_to_categories p2c )
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 p.products_id = pd.products_id
AND pd.language_id = 1 AND p.products_id = p2c.products_id
AND p2c.categories_id = c.categories_id
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%'
)
)
)
Run Code Online (Sandbox Code Playgroud)
但我想要搜索那些WHERE子句,或者,如示例中给出一个数字关键字值,只需将其添加到上一个查询中即可搜索产品ID:
OR (p.products_id=3220)
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,添加冻结了mysql服务器.它只是继续执行查询,它永远不会结束.我必须手动重启服务器.我做错了什么?
当你将OR添加到最后(假设你在最后一个paren之后添加它)时,你正在创建一个笛卡尔连接,因为你使你在WHERE子句(p.products_id = pd.products_id
,p.products_id = p2c.products_id
和p2c.categories_id = c.categories_id
)中放置的JOIN条件无效.另外,为什么要将初始表(产品,制造商,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)
Run Code Online (Sandbox Code Playgroud)
我不明白你的p.products_status = 1 AND pd.language_id = 1
意思是什么,所以你可能需要调整它们在JOIN中的含义.
归档时间: |
|
查看次数: |
16513 次 |
最近记录: |