2012-03-01 2 views
0

クエリでJOINでき、NOT IN()句を使用できますか?私は「友人」であり、その結果から人々を除外しようとしています原因私が持っているものmySQL JOIN ON NOT()?可能

は)私はNOT IN(として動作するように

JOIN memb_friends c ON (c.mID = loc.mID OR c.friendID = loc.mID) AND (c.mID = 21 OR c.friendID = 21) 

この行が必要

SELECT DISTINCT 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 memb_geo_locations loc 
       JOIN memb_baseInfo a ON a.mID = loc.mID 

       JOIN memb_friends c ON (c.mID = loc.mID OR c.friendID = loc.mID) AND (c.mID = 21 OR c.friendID = 21) 
       WHERE loc.primaryAddress = '1' 
       AND loc.mID NOT IN(21) 
       HAVING `distance` < 25 ORDER BY `distance` ASC LIMIT 0, 25 

ある memb_friendsテーブルでは、mIDとfriendIDの両方の列が同じ番号になります。友情の要求を誰が開始したかに依存します。だから、自分のIDが21であると言うことができます。私はそのテーブルのfriendIDまたはmIDであり、他の誰かのIDは相手です。私のリストには10​​人の友達がいて、データベースには1000人がいます。結論は、私はクエリが完了した後に動作する990の結果を持っている必要がありますが、私はこれに固執しています、どのようにクエリで使用するためにテーブルをジョインし、そこから除外する方法。

答えて

1

外部結合を実行し、c.mIDがnullのローを選択するのはどうですか?

+0

そのテーブルのmIDまたはfriendIDはnullではないでしょう。そこには、私が友人でない990人の人を指すエントリも、友人でもある10人を示す人もいます。 – chris

+0

ああ、笑、私はあなたが今言っていることを理解している。少しでも遊んだ後も、私はまだ正しい結果を得られない。私の努力の中でDISTINCT – chris

+0

にもかかわらず、私は10のうちの2つを取得するか、いくつかの重複を得てしまいました。そのビットは泳ぎに役立った、ありがとう。 – chris