2015-02-08 46 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