PHP MySQL搜索字符串&位置距离

时间:2015-02-08 02:40:16

标签: php mysql

我的表user包含列latitudelongitude

另一个列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)

1 个答案:

答案 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";

另外,请确保您拥有正确的表名。在您的问题中,您说“用户”和“产品”,但在您的查询中,您有“用户”和“产品”。