我的表包含公司列表以及位置(位置ID作为外键)
并且用户将在搜索框中的位置搜索公司,并且我想要返回与该位置匹配的公司(位置ID),如果该公司中没有公司存在,我想要显示可用的公司在其他位置(靠近要求的位置 - 根据GEO-SPACIAL坐标在不同的表格中以某种方式将位置映射到附近)
所以我的SQL要求这个过程如下
$ loc_id = SELECT id FROM location WHERE location_name = $ locationTerm
$ companies = SELECT * FROM companies WHERE location_id = $ loc_id
然后如果返回的查询少于行数(比如3),即$ companies.count()< 3 那么我们需要寻找附近的区域来提高公司的业绩。
从表格中获取附近的位置 NearByLcoations (多对多)包含附近的地点对
$ array_loc_ids = SELECT nearby_loc_id FROM NearbyLocations WHERE loc_id = $ loc_id;
$ companies = SELECT * FROM公司WHERE in($ array_loc_ids);
在这个过程中,我多次点击表公司,位置表一次,并且条件无法点击附近的位置表..是否有任何SQL优化可以减少查询时间...这对我有用但是我认为是非常差的编码和方法来实现结果...任何好的建议来优化查询???
答案 0 :(得分:0)
根据名称获取位置ID的前两个查询然后从公司表中获取具有该位置ID的公司可以合并如下 -
SELECT * FROM company join location on location.id = company.locationid
where location.name = 'locationname';
我建议为整个过程创建mysql stored procedure。它肯定会提高整个过程的性能。