[英]mysql where condition priority
我有以下查詢,它得到第一個結果“編輯:每個聯系人”我想要,但我不需要每個聯系后的任何其他結果。 所以例如,如果他們有3個電話#,一個是主要的,它給我主要的,然后另一個2.我已經嘗試了分組,但它最終得到第一個拉,無論主要與否。 如果沒有在循環中進行php檢查,如果聯系已經存在,我是如何做到這一點的任何想法?
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。
使用LIMIT表達式將結果集縮小到第一個結果。 有關詳細信息,請參閱SELECT語法 。
在查詢結束時使用LIMIT 1
使用左連接:
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
試試這個變種 -
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.