mysql多内连接并发症

时间:2012-02-21 04:40:44

标签: mysql sql join

我有这个查询。这似乎给我带来了并发症。如果我取出第3个表约束,它就可以工作。但我需要第3个表格来改进我正在进行的搜索。我的问题是它没有给我一个错误,但它不会产生结果,或者它应该与我在数据库中的数据产生至少1。

SELECT loc.*, 
       a.firstname, 
       a.lastname, 
       a.profileimg,
       (((acos(sin((37.2790669*pi()/180)) * sin((`latitude`*pi()/180))+cos((37.2790669*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((-121.874722 - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` 
  FROM geo_locations loc
  JOIN memb_Info a ON a.mID = loc.mID
 WHERE a.firstname LIKE 'Lisa%' 
   AND loc.primaryAddress = '1' 
   AND memb_x.xName LIKE '%Monkey'
ORDER BY `distance` ASC

如果我删除

AND memb_x.xName LIKE '%Monkey'

我得到的结果没有问题,但是memb_x表有一个列xName,它是我想要应用于上面查询的各种过滤器,但我似乎迷失了我应该如何处理它。我试图正确加入内部,但这并没有给我任何好处,导致重复的结果和结果不能实际覆盖我想要实现的目标。

所以打破它。我想做的是对我的成员进行径向搜索,这样他们就可以看到那里的其他成员..这最初源于geo_locations,我试图从id返回信息,所以我可以INNER JOIN memb_Info表为用户firstname lastname等。所有表之间的一个连接器是mID,它是成员id。现在,第三个表中的成员ID也包含具有相似兴趣或过滤器的用户,因此我希望根据这些过滤器缩小结果,这是我无法正确构建查询的地方,需要帮助修复它。

1 个答案:

答案 0 :(得分:1)

我不确定你是什么意思,但这就像你需要的那样:

SELECT loc.*, 
   a.firstname, 
   a.lastname, 
   a.profileimg,
   (((acos(sin((37.2790669*pi()/180)) * sin((`latitude`*pi()/180))+cos((37.2790669*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((-121.874722 - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` 
FROM geo_locations loc
JOIN memb_Info a ON a.mID = loc.mID 
JOIN memb_x x ON x.mID=loc.mID
WHERE a.firstname LIKE 'Lisa%' 
AND loc.primaryAddress = '1' 
AND x.xName LIKE '%Monkey'
ORDER BY `distance` ASC