2012-02-21 58 views
0

我有這個查詢。這似乎給我帶來了困難。它可以工作,如果我拿出第三個表約束。但是我需要第三張表的禁忌來完善我正在進行的搜索。我的問題是它不會給我一個錯誤,但它不會產生任何結果,或者它至少會在我的數據庫中產生一個數據。mysql多內連接複雜化

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返回的信息,所以我可以內部加入memb_Info表爲用戶firstname姓氏等。所有表之間的一個連接器是成員id的mID。現在這個成員ID也在第三張表上的用戶有類似的興趣或過濾器,所以我想根據這些過濾器減少我的結果,這是我沒有正確構建我的查詢,並需要幫助解決它。

+0

你確定你的數據相匹配的標準是什麼? 'LIKE'%Monkey''表示該字符串必須以「Monkey」結尾。 – 2012-02-21 04:45:00

+1

你的查詢根本沒有加入'memb_x'表 - 它應該返回一個錯誤,而不是首先工作?你應該可以添加一個'? JOIN memb_x ON memb_x.mID = a.mID'您可以在其中爲您的設置選擇合適的連接(INNER,LEFT,...)。 – 2012-02-21 04:51:05

+0

是的,我的標準與我想要達到的標準相匹配,只是讓查詢變得恰到好處,對我來說是非常重要的部分。沒有上述不加入它,但另一個類似的查詢我試過了一個沒有任何相關的東西,其中大部分都沒有加入它。 – chris 2012-02-21 04:53:32

回答

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