mysql, где условие приоритет - PullRequest
0 голосов
/ 14 апреля 2011

У меня следующий запрос, и он получает первый результат «Редактировать: каждого контакта», как я хочу, но после этого мне не нужны никакие другие результаты для каждого контакта. Так, например, если у них есть 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.

Ответы [ 4 ]

1 голос
/ 14 апреля 2011

Используйте LIMIT 1 в конце вашего запроса

1 голос
/ 14 апреля 2011

Используйте выражение LIMIT, чтобы сузить набор результатов до первого результата. Подробнее см. SELECT синтаксис .

0 голосов
/ 14 апреля 2011

Попробуйте этот вариант -

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
0 голосов
/ 14 апреля 2011

Использовать левое соединение:

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...