我有一个表格,其中包含公司列表和位置(位置 ID 作为外键)
用户将在搜索框中搜索该位置的公司,我想返回与该位置(位置ID)匹配的公司,如果该位置不存在该公司,我想显示可用的公司在其他位置(靠近所要求的位置 - 位置在基于地理空间坐标的不同表中以某种方式映射为附近)
所以My SQL对此过程的要求如下
- 获取位置 ID
$loc_id= SELECT id FROM location WHERE location_name=$locationTerm
- 使用该位置 ID 获取公司表中的公司
$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 表中查询附近位置 ID 的数组
$companies= SELECT * FROM companies WHERE in($array_loc_ids);
在此过程中,我多次访问表公司,位置表一次,并且在条件下无法访问附近的位置表。是否有任何 SQL 优化可以减少查询时间...这对我有用,但是我认为实现结果的编码和方法非常糟糕......有什么好的建议来优化查询???
最佳答案
根据名称获取位置 id,然后从具有该位置 id 的公司表中获取公司的前两个查询可以组合如下 -
SELECT * FROM company join location on location.id = company.locationid
where location.name = 'locationname';
我建议创建一个 mysql stored procedure对于这整个过程。这肯定会提高整个过程的性能。
关于php - SQL : How to reduce multiple time querying the same table ..查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20822572/