带字符串和位置距离的PHP MySQL搜索
我有一个带有纬度和经度列的表用户 另一个表包含列标题说明的产品 我试图创建一个PHP搜索表单,其中的结果通过关键字/字符串输入和位置输入进行过滤 所以本质上,我试图查询products表以查找匹配项,同时查询users表以查找邻近性。您搜索一个产品,结果会显示离您最近的商店 这是我对匹配关键字/字符串的查询 从产品中选择*,其中MATCHitem_name,item_desc-on:searchstr处于布尔模式且public=1 我试图使用外键/引用products表中user表中的lat/lng列,但没有成功带字符串和位置距离的PHP MySQL搜索,php,mysql,Php,Mysql,我有一个带有纬度和经度列的表用户 另一个表包含列标题说明的产品 我试图创建一个PHP搜索表单,其中的结果通过关键字/字符串输入和位置输入进行过滤 所以本质上,我试图查询products表以查找匹配项,同时查询users表以查找邻近性。您搜索一个产品,结果会显示离您最近的商店 这是我对匹配关键字/字符串的查询 从产品中选择*,其中MATCHitem_name,item_desc-on:searchstr处于布尔模式且public=1 我试图使用外键/引用products表中user表中的lat/l
"SELECT *,
truncate((degrees(acos(
sin(radians(lat))
* sin( radians(:lat))
+ cos(radians(lat))
* cos( radians(:lat))
* cos( radians(lng - :lng) )
) ) * 69.09),1) as distance FROM users, product
WHERE MATCH(product.item_name,product.item_desc) AGAINST(:searchstr IN BOOLEAN MODE)
AND public = 1";
你知道我该怎么做吗
谢谢
编辑:我已经在使用外键将每个产品与特定用户user.id=products连接。user_id如果我理解正确,您需要将两个表连接在一起。试试这个:
"SELECT *,
truncate((degrees(acos(
sin(radians(lat))
* sin( radians(:lat))
+ cos(radians(lat))
* cos( radians(:lat))
* cos( radians(lng - :lng) )
) ) * 69.09),1) as distance FROM users
JOIN product ON product.user_id = users.id
WHERE MATCH(product.item_name,product.item_desc) AGAINST(:searchstr IN BOOLEAN MODE)
AND public = 1
ORDER BY distance";
此外,请确保表名正确。在你的问题中,你说的是用户和产品,但在你的查询中,你有用户和产品