2011-04-14 46 views
0

我有以下查詢,它得到第一個結果「編輯:每個聯繫人」,因爲我想,但我不需要任何其他結果後每個聯繫人。所以舉個例子,如果他們有3個電話號碼,一個是主要的,它給了我主要的,然後是另一個2.我嘗試了分組,但最終無論是否主要都會得到第一個。任何想法如何我可以做到這一點,而不做一個PHP檢查循環,如果聯繫已經存在?mysql在哪裏條件優先

SELECT pc.firstname, pc.lastname, pp.areacode, pp.prefix, pp.last4 
, if(pc.mainphone = pp.phoneid,1,0) as phone_priority 
FROM contacts pc 
JOIN phone pp ON ((pp.contid = pc.contid && pp.phoneid = pc.mainphone) || (pp.contid = pc.contid)) 
ORDER BY pc.lastname ASC, pc.firstname ASC, phone_priority DESC 

表設置:

 
contacts (id, firstname, lastname, mainphone) 
phone (id, areacode, prefix, last4) 

使用MySQL 4.

+0

不能使用限制。我需要了解聯繫人的完整列表。 – David 2011-04-14 13:36:54

+0

JOIN或LEFT JOIN;由於||而沒有區別「或」聲明部分 – David 2011-04-14 13:38:51

+0

使用左連接時刪除||部分標準。 – Chandu 2011-04-14 13:40:05

回答

1

使用LIMIT表達式來縮小結果集下降到第一結果。有關詳細信息,請參閱SELECT Syntax

+0

不應該這是一個評論? – 2011-04-14 13:26:38

+1

號您爲什麼認爲這應該是一個評論? – Oswald 2011-04-14 13:27:24

+0

@Shakti:我同意Oswald。雖然有時候發佈可能有助於評論的鏈接是合適的,但如果它實際上是對問題的回答,則應將其作爲答案發布,以便將其標記爲答案。使來到頁面的其他人能夠更輕鬆地立即找到答案,而無需通讀非相關文本。 – FreeAsInBeer 2011-04-14 13:32:05

1

使用LIMIT 1在查詢結束

0

使用左連接:

SELECT pc.firstname, 
    pc.lastname, 
    pp.areacode, 
    pp.prefix, 
    pp.last4 , 
    CASE 
     WHEN pp.mainphone IS NULL THEN 0 
     ELSE 1 
END AS phone_priority 
FROM contacts pc LEFT JOIN phone pp 
    ON pp.contid = pc.contid 
AND pp.phoneid = pc.mainphone 
ORDER BY pc.lastname ASC, pc.firstname ASC, phone_priority DESC 
+0

如果main不存在但手機存在,我仍然需要拔出電話。所以首先檢查主要存在,如果沒有得到任何電話,否則沒有電話。正如我所說的查詢工作,它只是拉主,然後是非主電源。我需要限制每次聯繫一個結果。如果主要它是列出的,如果不是哪一個電話先到。謝謝 – David 2011-04-14 13:51:48

0

試試這個變種 -

SELECT t.contid 
    , t.firstname 
    , t.lastname 
    , if(t.phoneid IS NULL, p2.phoneid, t.phoneid) phone 
    , if(t.phoneid IS NULL, p2.areacode, t.areacode) areacode 
    , if(t.phoneid IS NULL, p2.prefix, t.prefix) prefix 
    , if(t.phoneid IS NULL, p2.last4, t.last4) last4 

FROM 
    (
    SELECT c.contid 
     , c.firstname 
     , c.lastname 
     , c.mainphone 
     , p.phoneid 
     , p.areacode 
     , p.prefix 
     , p.last4 

    FROM 
    contacts c 
    LEFT JOIN phone p 
    ON c.contid = p.contid AND c.mainphone = p.phoneid) t 
LEFT JOIN phone p2 
    ON t.contid = p2.contid AND t.mainphone <> p2.phoneid 
GROUP BY 
    t.contid