PHP MySQL 使用字符串和位置距离进行搜索

标签 php mysql

我有表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/

相关文章:

php - window.resize总是在IE中触发而不调整大小

phpspec 根据 psr-4 命名空间规范在错误的文件夹中创建文件

mysql - 将遗留的 mysql 数据库与新的 sails 应用程序一起使用

mysql - SQL 查询分配

php - PHP中的单个和多个数据过滤器

php - 尝试从表单将数据插入数据库时​​出现错误

javascript - 电子邮件和密码与即时用户反馈匹配

php - 从 PHP 调用 Python 并获取返回码

mysql - Realm可以像MySQL一样使用吗

mysql - Eloquent Raw 查询 MySQL JSON 上的 AND 运算符出现问题