2012-10-05 22 views
10

Belki de benim sorum açık değil, lütfen açıklamama izin ver: İhtiyacım olan tüm müşteri listesini almak için ilgili müşteri numarası/toptancı kombinasyonu ile birlikte, her müşteri istemci satırlar her gelen müşteri numarası/toptancı için bir, çoğaltılamaz var basit İÇ I JOIN kullanarak 2 tablolarNasıl mysql iç birleştirmek için satırlar satırları sütunlara grup

USERS 
id | name 
--------- 
1 | a 
2 | b 

CLIENT_NUMBERS 
id | user_id | number | wholesaler 
---------------------------------- 
1 | 1  | ac1 | aw1 
2 | 1  | ac2 | aw2 
3 | 2  | bc1 | bw1 

var benim db 1 en fazla 4 farklı müşteri numarası/toptancı açılan

sahiptir

Bu sorguda GROUP_CONCAT kullanarak sonuçları düzeltmek için idare ettik: So far so good

SELECT a.id AS user_id, a.name AS Name 
GROUP_CONCAT(b.client_no, ', ', b.wholesaler SEPARATOR '; ') AS client_no_wholesaler 
FROM users AS a 
INNER JOIN client_numbers AS b ON a.id = b.user_id 
GROUP BY ID 

user_id | name | client_no_wholesaler 
-------------------------------------------- 
1  | a | ac1, aw1; ac2, aw2 
2  | b | bc1, bw1 

, ama benim sonuçlarınızın şöyle böylece farklı sütunlar halinde müşteri numarası/toptancı kombinasyonunu "patlayabilir" gerek : bir XLS dosyasını ve benim sorgu sonucu sütunları temel, herhangi bir fikir takdir edilecektir oluşturmak için bir sınıf kullanıyorum çünkü basit bir PHP ile sorgu sonuçları elde ettikten sonra bu Doing

user_id | name | client_no_wholesaler1 | client_no_wholesaler2 | ...up to 4 
---------------------------------------------------------------------------- 
1  | a | ac1, aw1    | ac2, aw2    | 
2  | b | bc1, bw1    |      | 

patlayabilir bir seçenek değildir .

cevap

5

Ne istediğiniz genel olarak "pivot" olarak adlandırılır. İlave yinelenen için ON fıkrada giderek artan id durumun ilavesiyle katılır önlemek katılır

SELECT 
    a.id AS user_id, 
    a.name AS Name, 
    CONCAT(b1.client_no, ', ', b1.wholesaler) AS client_no_wholesaler1, 
    CONCAT(b2.client_no, ', ', b2.wholesaler) AS client_no_wholesaler2, 
    CONCAT(b3.client_no, ', ', b3.wholesaler) AS client_no_wholesaler3, 
    CONCAT(b4.client_no, ', ', b4.wholesaler) AS client_no_wholesaler4 
FROM users AS a 
JOIN client_numbers AS b1 ON b1.user_id = a.id 
LEFT JOIN client_numbers AS b2 ON b2.user_id = a.id and b2.id > b1.id 
LEFT JOIN client_numbers AS b3 ON b3.user_id = a.id and b3.id > b2.id 
LEFT JOIN client_numbers AS b4 ON b4.user_id = a.id and b4.id > b3.id 
GROUP BY 1, 2 

Not olun: İşte

fazladan fazladan her sütun için katılmak kullanarak sql bu kodu nasıl Eklemler. Kimlik uygun bir sipariş sütunu değilse, birleştirmeleri ayırmak için başka bir şey seçin.

+0

"Pivot" Bugün yeni bir şey öğrendim, çok teşekkürler, sorgunuz ihtiyaç duyduğum gibi çalışıyor – hey259

İlgili konular