Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用多in子句进行MYSQL PDO lat lon搜索_Mysql_Pdo_Geolocation_Where In - Fatal编程技术网

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

使用多in子句进行MYSQL PDO lat lon搜索,mysql,pdo,geolocation,where-in,Mysql,Pdo,Geolocation,Where In,我无法绞尽脑汁思考如何构造这个sql查询 我有三张桌子 用户表 用户id 名称 图画 等 标记参考表 用户id 标签号 地理定位表 用户id 吉奥拉特 杰隆 我需要能够做的是根据位置和与他们相关联的标签查找用户。我有两个问题分别处理 这是我用于位置查询的内容: $sql_search_people = "SELECT user_id, ( 3959 * acos( cos( radians(?) ) * cos( radians( geolat ) ) * cos( radians( geolo

我无法绞尽脑汁思考如何构造这个sql查询

我有三张桌子

用户表

用户id 名称 图画 等 标记参考表

用户id 标签号 地理定位表

用户id 吉奥拉特 杰隆 我需要能够做的是根据位置和与他们相关联的标签查找用户。我有两个问题分别处理

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

$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'";
现在我只需要弄清楚如何将这两个查询组合成一个查询。我想不出来!我尝试过连接和子查询,但我真的很难理解这些

任何帮助都将不胜感激

**更新**

在玩了更多的游戏后,我成功地实现了这一点:

    $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\u 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

嗯,它正在用这个做标记查询,但似乎没有使用地理位置查询?
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