mysql - 希望合并两个查询

标签 mysql database wordpress relation

我正在尝试将两个查询合并为一个查询,希望您能帮助我。

该查询获取一定距离内的条目(邮政编码)列表。效果很好。 ($lat、$lng、$zip 和 $size 目前已硬编码)。

现在我需要将其与从另一个表中搜索与这些邮政编码匹配的条目结合起来。

这是我的查询:

SELECT
    source.zc_zip, 
    source.zc_location_name,
    ACOS(
         SIN(RADIANS(zc_lat)) * SIN(RADIANS($lat)) 
         + COS(RADIANS(zc_lat)) * COS(RADIANS($lat)) * COS(RADIANS(zc_lon)
         - RADIANS($lng))
         ) * 6371 AS distance
FROM zip_coordinates AS source
WHERE zc_id <> $zip
GROUP BY source.zc_zip
HAVING distance < $size
ORDER BY distance LIMIT 10;

我已经将其修改为如下所示,因为当 source.zc_zip 与 info.meta_value 相同时我们匹配:

SELECT
    source.zc_zip, 
    source.zc_location_name,
    info.*,
    ACOS(
         SIN(RADIANS(zc_lat)) * SIN(RADIANS($lat)) 
         + COS(RADIANS(zc_lat)) * COS(RADIANS($lat)) * COS(RADIANS(zc_lon)
         - RADIANS($lng))
         ) * 6371 AS distance
FROM zip_coordinates AS source, wp_postmeta AS info
WHERE zc_id <> $zip AND info.meta_value = source.zc_zip
GROUP BY source.zc_zip
HAVING distance < $size
ORDER BY distance LIMIT 10;

不用说这个查询真的很慢(> 1秒)。

有人可以帮忙吗?谢谢! :-)

——多米尼克

最佳答案

我向OP询问了以下问题:

You want to combine 2 queries, you give me one (in 2 versions), but where's the second query, the one to combine with the first?

OP的回复:

  • The first one is the basic query but it lacks the information I tried to get with the second query. The second query is slow so I am looking for an alternative to the second where I combined the first query with stuff I found online. – dmnkhhn Aug 15 '11 at 18:18

$lat$lng$zip$size 目前是硬编码的,因此添加将距离作为带有存储过程的计算列可能不是您的想法。计算值上的 ORDER 显然会让您创建一个包含所有行的临时表以及计算值上的索引。所以时间随着行数的增加而增长。拿高中的数学书来计算圆周围的平方。使用这些值可将 99% 的 zc_latzc_lon 排除在计算之外,包括 WHERE 中的那些限制。

替代方案:昨晚想了一下,更好的方法是通过编程:在圆圈的内部正方形中获取 10 个最近的活着的人。这样您就不需要在查询中进行任何计算,只需在程序中计算限制边界即可。

如果导致案例太少,请使用上面的公式编写另一个查询,选择内部和外部方 block 之间的区域。它将像火箭一样运行:您只对某些记录进行计算,除非当您尝试找到 10 英里圆圈时,大多数客户正好居住在 9 到 11 英里之间。

关于mysql - 希望合并两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065286/

相关文章:

mysql - 文本框上的数据字段

MySql:用于拆分、返回表的存储过程

mysql - 如何在Update语句中使用Order by

database - 默认 getdate() 值错误 SQL AZURE

php - MYSQL 多个like搜索位置

javascript/php 从数据库动态替换图像源

php - 用户偏好、存储在数据库或 cookie 中?

php - 我应该在 Wordpress 中构建一个新主题还是修改现有主题?

php - 为什么在 Wordpress 插件的类中使用 $this 会引发 fatal error ?

wordpress - 删除的页面爬取失败,出现 404