我有一个汽车的分类列表网站,我正在开发使用PHP开发的过程。用户使用主页上的下拉选项框输入他们正在寻找的汽车的详细信息。当他们点击提交时,他们被带到结果页面,这是我遇到问题的地方。有关SQL查询速度和性能问题的帮助
它是建立在目前的方法是:
- 数据库中查询他们正在寻找汽车匹配任何结果。查询返回汽车的ID和广告的邮政编码;
- 然后检查每个广告的用户邮政编码和广告邮政编码之间的距离。这本身需要数据库查询来查找每个广告的单个邮政编码的坐标,并且对于有时可能超过350个结果的相当耗时;
- 然后使用if语句来确定距离是否小于或等于用户在主页上输入的距离
- 如果广告在允许的距离内,则它的ID被添加到数组;
- 然后计算该阵列中的广告总数,并用于确定取决于广告数量和要在页面上显示的广告数量的变量;
- 然后使用
WHERE
语句和数组中的ID执行广告表的第二个查询。例如SELECT * FROM adverts WHERE ID=1 AND ID=4 AND ID=23
........查询中使用的ID的总数取决于第5点中提到的变量。然后,当用户单击下一页时,将从数组中剩下的位置重新运行查询然后查询被重新创建并执行。
我遇到的问题是,它需要很长时间才能完成,我正在寻找更多的资源和时间完成它的有意识的方式。
它最初被设计为用WHERE子句为每个用户对汽车的特定要求执行查询,然后在输出到页面之前使用if语句检查距离。这造成了页面编号的问题,因为无法确定与查询中返回的广告的距离要求相匹配的广告数量 - 因此,在完整广告被收集之前满足距离条件的情况下这样做计算要显示的确切数量的广告。
对不起,它有点长 - 希望它是有道理的。我没有包含任何代码,因为它会让它变得更长,而且它的逻辑问题与实际代码相反。
感谢您提出的任何建议。
有人要求表布局和SQL。开始.....
广告表
ID,品牌,型号,颜色,里程,发动机,年份,邮编
邮编表
ID,邮编,GridN,GridE,经度,纬度
用于首次查询以获得ID和邮政编码的SQL
SELECT ID, Postcode FROM adverts WHERE Make = '$subMake' AND Model = '$subModel'
等
SQL第二查询来获得使用符合距离要求,该ID的该广告的详细信息:
SELECT Make, Model, Year, Engine, Colour FROM adverts WHERE ID IN(1,2,6,90,112,898)
(很抱歉,如果它不是语法正确的,它的工作,即SQL只是查询字符串的许多行的粗略轮廓)。
'SELECT * FROM adverts WHERE ID = 1 AND ID = 4 AND ID = 23' would always always returns 0 rows?你的意思是'SELECT * FROM adverts WHERE ID IN(1,4,23)'instead? – GordonM
某些答案最少需要的是表结构和您正在使用的SQL ... – Yahia
是不是可以在您的SQL语句中执行距离计算,然后在返回之前进行筛选?这会快很多...... – Paddy