使用多in子句进行MYSQL PDO lat lon搜索
我无法绞尽脑汁思考如何构造这个sql查询 我有三张桌子 用户表 用户id 名称 图画 等 标记参考表 用户id 标签号 地理定位表 用户id 吉奥拉特 杰隆 我需要能够做的是根据位置和与他们相关联的标签查找用户。我有两个问题分别处理 这是我用于位置查询的内容:使用多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_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