我的表user
包含列latitude
和longitude
。
另一个列products
,其中包含title
description
我正在尝试创建一个PHP搜索表单,其中结果通过关键字/字符串输入和位置输入进行过滤。
基本上,我正在尝试查询products表以查找匹配项,同时查询users表的邻近度。您搜索产品,结果显示具有离您最近的产品的商店。
这是我用来匹配关键字/字符串
的查询 SELECT * FROM products WHERE MATCH(item_name,item_desc) AGAINST(:searchstr IN BOOLEAN MODE) AND public = 1
我正在尝试使用外键/引用user
表中products
表中的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)
答案 0 :(得分:0)
如果我理解正确,你需要将两张桌子加在一起。试试这个:
"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";
另外,请确保您拥有正确的表名。在您的问题中,您说“用户”和“产品”,但在您的查询中,您有“用户”和“产品”。