php - SQL : How to reduce multiple time querying the same table ..查询优化

标签 php mysql sql sql-server database

我有一个表格,其中包含公司列表和位置(位置 ID 作为外键)

用户将在搜索框中搜索该位置的公司,我想返回与该位置(位置ID)匹配的公司,如果该位置不存在该公司,我想显示可用的公司在其他位置(靠近所要求的位置 - 位置在基于地理空间坐标的不同表中以某种方式映射为附近)

所以My SQL对此过程的要求如下

  1. 获取位置 ID

$loc_id= SELECT id FROM location WHERE location_name=$locationTerm

  1. 使用该位置 ID 获取公司表中的公司

$companies= SELECT * FROM companies WHERE location_id= $loc_id

  1. 如果返回的查询少于行数(比如 3),即 $companies.count()<3 那么我们需要寻找附近的地区来提高公司的业绩。

  2. 从表NearByLcoations(多对多)中获取附近位置,该表由附近位置对组成

$array_loc_ids= SELECT nearby_loc_id FROM NearbyLocations WHERE loc_id= $loc_id;

  1. 然后再次在 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/

相关文章:

php - mysql : Join/Relating two tables

php - Facebook:如何解析访问 token 字符串

php - 我认为 MySqli select 不起作用?

mysql - 使用 MySQL 对四个表进行 SQL 查询 - 'intersection'

javascript - 在 javascript 函数中使用 php _GET

php - Propel 1 中按 NULL 排序

php - 显示 PHP mysql 表中的图像

php - 无法获取 fgetcsv 文件以与 MySQL 数据库一起使用

sql - MySQL 连接条件

mysql - 如何在mysql中进行模糊查询? 1表10GB数据,8KW记录