我的目标是显示公司的搜索结果:包含类别和不包含(尚未添加)。我的公司表有或多或少12000条记录。有类别的公司只有或多或少200。
有两个搜索输入: $ name - >公司名称或类别。 $ id_country - >国家的身份
我想要显示: 1)所有数据库中有多少结果。 (这就是我使用的原因:SQL_CALC_FOUND_ROWS) 2)我使用LIMIT每页显示10个结果(带分页)。
我的查询:
SELECT SQL_CALC_FOUND_ROWS
c.*,
lc.name as langName,
lc.shortDesc,
lc.longDesc
FROM companies c
JOIN lang_companies lc USING(id_company)
LEFT JOIN categories_companies cc USING(id_company)
LEFT JOIN lang_categories lang_cat USING (id_category)
WHERE
lc.id_lang = '2' AND c.status = 1 AND c.active = 1 AND c.id_country = ".$id_country." AND
(lc.name = LCASE('".$name."') OR (lang_cat.name = LCASE('".$name."') AND lang_cat.id_lang = '2')
OR c.city = '".$name."')
GROUP BY c.id_company
ORDER BY c.id_hierarchi asc
LIMIT 0, 10
此查询执行或多或少6秒,我想优化它。你可以帮帮我吗? 我会很感激任何建议。
答案 0 :(得分:0)
在查询的FROM部分中,您似乎没有实际使用与这两行连接的表:
LEFT JOIN categories_companies cc USING(id_company)
LEFT JOIN categories cat USING (id_category)
我认为你可以简单地将它们从查询中排除,如果它们不像通过连接抑制行这样的sublte相关。