2016-04-07 21 views
0

Verilerimi MySQL veri tabanından almaya çalışıyorum. tablosunun yapısı (Tab_1) vardır: Bunun ne görebileceğiniz gibi aslında ayrıntıları bilgisini siparişÇok satırlı satırları sütunlara dönüştürün

id key  value 
1 address xyz 
1 post_code 120 
1 country CA 

.

Anahtar sütunu gerçek bir sütun ve bu sütunun değeri olacak şekilde dönüştürmek istiyorum. anlamı: id=1 bu düzenin anahtarıdır

id address post_code country 
------------------------------------ 
    1 xyz  120   CA 

.

MySQL tablosundaki tablo değiştirilemez. Kullandığımız yakın bir sistemin parçası (WordPress eklentisi) Sadece bazı verileri alan bir sorgu yazmak istiyorum ...

Amacım, bir veriler:

Select x.address ,x.post_code, x.country 
from orders 
join (...) as x using (order_id=id) 
where order_id=1 

o vermelidir: Eğer katılmak adres, post_code, ülke vb ... olan x'in tüm alanları almak için varsayalım görebileceğiniz gibi

address post_code country 
------------------------------------ 
     xyz  120   CA 

nerededönüştürmek sorguyu koymak gerekiyor Birleştirme için okunabilir bir katmana.

Bunu nasıl yapabilirim?

+0

GRUP TARAFINDAN, vaka ifadeleri ,. – jarlh

+0

Group By bu soruyu çözmeyecek. Değerleri sütunlara dönüştürmez. '' ''' sütunu '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'gelmesi gerektiğini unutmayın 'X.address' seçiminde söylediğimde bana xyz 'yi vermesini istiyorum. – java

cevap

2

, bir GROUP BY yapın farklı anahtar türleri için CASE ifadeler kullanmak:

select id, 
     max(case when key = 'address' then value end) as address, 
     max(case when key = 'post_code' then value end) as post_code, 
     max(case when key = 'country' then value end) as country 
from orders 
group by id 
+0

Neden Max kullanıyorsunuz? – java

+0

Boş olmayan değeri seçmek için. MIN'yi de kullanabilirsiniz. (Kimlik başına sadece bir adres/post_code/ülke olduğunu varsayalım.) – jarlh

+0

evet sadece bir tane var ... bu yüzden neden maksimum ya da min neden gerekli olduğunu anlamıyorum ... – java

0

Yalnızca 4 seçer kullanabilirsiniz: farklı anahtar türleri için

SELECT id, (SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'address') AS address, 
(SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'post_code') AS post_code, 
(SELECT value FROM Tab_1 WHERE id = 1 AND `key` = 'country') AS country FROM Tab_1 
GROUP BY id; 
+1

Bunu yapıyorsanız, en azından ilişkili alt sorguları var. (Şimdi her zaman id = 1 değer döndürürsünüz.) – jarlh