2015-02-08 41 views
0

我有表user与列latitudelongitude带有字符串和位置距离的PHP MySQL搜索

另一个表products与我试图创造一个结果是由关键字/字符串输入和位置输入过滤PHP的搜索表单列titledescription

因此,本质上,我试图查询产品表来查找匹配,同时查询用户表的邻近度。您搜索产品,结果显示产品最近的商店。

这是查询我的关键字匹配/串

SELECT * FROM products WHERE MATCH(item_name,item_desc) AGAINST(:searchstr IN BOOLEAN MODE) AND public = 1

我试图使用外键/在products引用表格中user表中的纬度/经度列,但我没有运气。

"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

如果我理解正确的话,你需要加入每个产品两张桌子在一起。试试这个:

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

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

+0

谢谢!这工作,我不明白JOIN如何工作。 – 2015-02-09 03:29:03