MYSQL PDO lat lon 使用多个 in 子句进行搜索

标签 mysql pdo geolocation where-in

我绞尽脑汁想不出如何构造这个 SQL 查询。

我有 3 张 table 。

用户

  1. 用户 ID
  2. 姓名
  3. 图片 等等

tag_ref表格

  • 用户 ID
  • tag_id
  • 地理位置

  • 用户 ID
  • geolat
  • 吉隆
  • 我需要做的是根据位置以及与他们关联的标签来查找用户。我有两个查询单独工作。

    这是我用于位置查询的内容:

    $sql_search_people = "SELECT user_id, ( 3959 * acos( cos( radians(?) ) * cos( radians( geolat ) ) * cos( radians( geolon ) - radians(?) ) + sin( radians(?) ) * sin( radians( geolat ) ) ) ) AS distance FROM geolocation 
            HAVING distance < '25'";
    

    然后我需要根据 tag_ref 表中的 tag_id 过滤结果。用户可以通过多个标签进行搜索。我在这里单独完成了这个:

    $sql_search_people = "SELECT b.user_id, b.name, b.picture, b.tagline, b.genres FROM tag_ref AS a LEFT JOIN users AS b ON a.user_id = b.user_id WHERE a.tag_id IN ($in) GROUP BY a.user_id";
    

    现在我只需要弄清楚如何将两者组合成一个查询。我无法弄清楚!我尝试过联接和子查询,但我真的很难理解这些。

    任何帮助将不胜感激。

    ** 更新 **

    玩了一会儿之后,我设法让它发挥作用:

        $sql_search_people = "SELECT a.user_id, b.user_id, c.user_id, c.tag_id, b.name, ( 3959 * acos( cos( radians(?) ) * cos( radians( geolat ) ) * cos( radians( geolon ) - radians(?) ) + sin( radians(?) ) * sin( radians( geolat ) ) ) ) AS distance FROM geolocation AS a RIGHT JOIN tag_ref AS c ON a.user_id = c.user_id RIGHT JOIN users AS b ON a.user_id = b.user_id WHERE c.tag_id IN ($in) HAVING distance < '25' ";
    

    但是,当用户拥有多个标签时,这当然是重复的结果。当我将 group by 添加到 group by user_id 时,查询失败?

    最佳答案

    我有一个想法,使用第一个查询是临时表来调用第二个查询:

    SELECT b.user_id, b.name, b.picture, b.tagline, b.genres FROM tag_ref AS a LEFT JOIN users AS b ON a.user_id = b.user_id,  (SELECT user_id, ( 3959 * acos( cos( radians(?) ) * cos( radians( geolat ) ) * cos( radians( geolon ) - radians(?) ) + sin( radians(?) ) * sin( radians( geolat ) ) ) ) AS distance FROM geolocation
    HAVING distance < '25') as location WHERE a.tag_id IN ($in) GROUP BY a.user_id
    

    关于MYSQL PDO lat lon 使用多个 in 子句进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118308/

    相关文章:

    php - 如何使用 union 在两个表中进行搜索?

    php - 使用 pdo 将表单值插入 mysql 数据库

    php - 如何仅在具有不同行的情况下更新 SQL

    mysql - 选择不存在相关记录的行

    mysql - 使用 mysql order case 对特定行进行排序

    php - 带有可选参数的 PDO 准备语句

    c# geocoordinate watcher 不返回正确的坐标

    mysql 带有地理位置的大表 - 查找交集

    jquery - 使用 Bing map REST 控件查找附近的实体

    mySQL - 按行号搜索行?