我有表user
,其中包含纬度
和经度
列。
另一个表products
,其中包含列title
description
我正在尝试创建一个 PHP 搜索表单,其中结果通过关键字/字符串输入和位置输入进行过滤。
所以本质上,我试图查询产品表以查找匹配项,同时查询用户表以查找邻近性。您搜索产品,结果会显示距离您最近的有该产品的商店。
这是我用于匹配关键字/字符串的查询
从产品中选择 * WHERE MATCH(item_name,item_desc) AGAINST(:searchstr IN BOOLEAN MODE) AND public = 1
我试图使用外键/引用 products
表中的 user
表中的 lat/lng 列,但我没有运气。
"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";
此外,请确保您拥有正确的表名称。在您的问题中您说“用户”和“产品”,但在您的查询中您有“用户”和“产品”。
关于PHP MySQL 使用字符串和位置距离进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28389995/