Php 尝试使用3个数据库表对产品进行地理本地化

Php 尝试使用3个数据库表对产品进行地理本地化,php,mysql,wordpress,geolocation,Php,Mysql,Wordpress,Geolocation,嗯,我正在WordPress上用地理定位产品开一家商店。问题是,当我使用搜索引擎时,我需要进行一个有点困难的查询,因为正如我所说,它包含3个表 我有这些桌子 wp_商店。我在哪里存储我拥有的存储位置 wp\产品\商店\关系。在我保持产品和商店之间关系的地方,是一个商店对多个产品的关系 然后product_id来自id,来自wp_posts表,该表在WordPress中默认用于存储所有类型的帖子,它按类型分类:有博客帖子、产品等 问题是,我必须使用wp_posts表对数据库进行查询,但当然,在搜索

嗯,我正在WordPress上用地理定位产品开一家商店。问题是,当我使用搜索引擎时,我需要进行一个有点困难的查询,因为正如我所说,它包含3个表

我有这些桌子

wp_商店。我在哪里存储我拥有的存储位置 wp\产品\商店\关系。在我保持产品和商店之间关系的地方,是一个商店对多个产品的关系 然后product_id来自id,来自wp_posts表,该表在WordPress中默认用于存储所有类型的帖子,它按类型分类:有博客帖子、产品等

问题是,我必须使用wp_posts表对数据库进行查询,但当然,在搜索引擎中,我想按距离对所有内容进行排序,因此我必须找出哪个商店拥有每种产品,以便了解商店位置和订单,然后按距离进行订购

事实上,我已经在索引中这样做了,但是我用了3个查询。在这里,我想把所有的东西都统一在一起,因为WordPress迫使我这样做,我想这是为了优化任务

按距离获取产品ID的主代码如下,这是索引代码:

$query = "SELECT *, 
            POW(69.1 * (latitude - $lat), 2) +
            POW(69.1 * ($lon - longitude) * COS(latitude / 57.3), 2) AS distance FROM wp_stores HAVING distance < POW($distance, 2) ORDER BY distance ASC";

在您的查询中,我主要发现了两个问题:

加入t1.ID会导致以下错误:1054-on子句中的未知列't1.ID',尽管我不知道为什么; 子查询返回2列纬度和经度,这导致错误1241-操作数应包含1列 我的建议如下:

选择wp_posts.*, POW69.1*stores.lation-$lat,2+ POW69.1*$lon-stores.longitude*COSstores.latitude/57.3,2作为距离 来自wp_的职位 在ps.product\u id=wp\u posts.id上左加入wp\u产品\u商店\u关系ps 使用商店id左键加入wp_商店 其中wp_posts.post_type=产品 距离小于50,2 按距离排序ASC; 注意:我假设我的查询可以通过连接wp_存储的子集来优化,该子集只包含具有该产品的相关存储,并且具有距离约束,而不是整个表,但没有进一步研究


编辑:删除wp_posts表上的别名。

Thaks获取答案!唯一的问题是我无法将别名wp_posts放到我的角色上。我已经为此提出了另一个问题:不客气!您应该能够使用原始表名wp_posts来删除posts别名。我已经相应地更新了我的原始答案。
SELECT *, (SELECT latitude, longitude FROM wp_stores LEFT JOIN wp_product_store_relations ON wp_stores.store_id = wp_product_store_relations.store_id AND wp_product_store_relations.product_id = t1.ID) as store, POW(69.1 * (store.latitude - $lat), 2) +
            POW(69.1 * ($lon - store.longitude) * COS(store.latitude / 57.3), 2) AS distance FROM wp_posts t1 WHERE wp_posts.post_type = "product" HAVING distance < POW(50, 2) ORDER BY distance ASC