2016-03-23 22 views
1

Çok sayıda farklı müşteri adayı için iletişim bilgileri içeren birden fazla tablom var. Kimlikler listesi ve 'leads' adları, 'phones' numaralı telefon numaraları ve 'lead_phones 'bağlantısını birleştiren bir tablo içeren bir tablo vardır. Bazı kişilerin o kişi için birden fazla telefon numarası vardır. Şöyle bir sorgu çalıştırdığınızda:MySql yeni sütununda çoklu ilişkiler

SELECT l.created, 
    l.id, 
    l.first_name, 
    l.last_name, 
    ph.number phone1, 
    #IF(COUNT(ph.number) > 1, *second phone*, null) AS phone2, 
    e.email email 
FROM leads l 
LEFT JOIN lead_phones lp ON lp.lead_id = l.id 
LEFT JOIN phones ph on ph.id = lp.phone_id 
LEFT JOIN lead_emails le ON le.lead_id = l.id 
LEFT JOIN emails e on e.id = le.email_id 
ORDER BY l.created DESC; 

Ben gerçekten sadece bir satırda Betty Boo koymak mümkün yapmak istiyorum ne bu

created    id first_name last_name phone  email 
2016-03-22 15:53:01 45620 Jimmy  Dean  5551234567 [email protected] 
2016-03-22 15:53:00 45619 John  Smith  5554561234 [email protected] 
2016-03-22 15:51:54 45618 Betty  Boo  5552582585 [email protected] 
2016-03-22 15:50:02 45617 Betty  Boo  5551478965 [email protected] 

gibi görünen bir tablo elde telefon 1 ve telefon 2. Sorgumdaki yorumlanan satır, istediğimi alma girişimiydi. Bunu nasıl bitireceğimi anlayamadım.

Teşekkür

+0

Can orada: Bu id alan (beklenen sonuçlar yardımcı olacağını) döndü, ancak sadece kurşun başına 2 telefon numaralarının maksimum olabilir varsayarak gereken biraz belirsiz, daha sonra burada min ve max kullanarak tek seçenek 2'den fazla telefon numarası olmak mı? Eğer öyleyse, 'dinamik sql' kullanmanız gerekecek ... Eğer değilse, bunu toplama ile yapmak için birkaç farklı yol var. – sgeddes

cevap

1

Sonuçlarınızı pivot çalışıyorsunuz. Hiç

SELECT max(l.created) created, 
    max(l.id) id, 
    l.first_name, 
    l.last_name, 
    min(ph.number) phone1, 
    max(ph.number) phone2, 
    e.email email 
FROM leads l 
    LEFT JOIN lead_phones lp ON lp.lead_id = l.id 
    LEFT JOIN phones ph on ph.id = lp.phone_id 
    LEFT JOIN lead_emails le ON le.lead_id = l.id 
    LEFT JOIN emails e on e.id = le.email_id 
GROUP BY l.first_name, l.last_name, e.email 
+0

Parlak! İstediğim şeyle eşleşecek satırları almak için birden fazla gruplama yapın ve ardından iki sayıyı ayırmak için min ve maks değerini kullanın. İkiden daha fazlasına sahip olsaydım, bir çeşit menzil fonksiyonu olduğunu tahmin ediyorum ve bir çözüm olurdu. Yardım için teşekkürler. –