【发布时间】:2018-05-01 14:28:13
【问题描述】:
我无法思考如何构建这个 sql 查询。
我有 3 张桌子。
用户表
- user_id
- 姓名
- 图片 等等
tag_ref 表格
- user_id
- tag_id
地理位置表
- user_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 时,查询失败?
【问题讨论】:
标签: mysql pdo geolocation where-in