Üç tablom var: items
, junction
ve properties
. Beş öğe (A'dan E'ye) ve beş özelliğim var (1'den 5'e kadar).Kartezyen Ürünü Birleşim Tablosundan Nasıl Bağlar MySQL'e Katıl
A: 1, 3, 5
B: 1, 2, 3
C: 1, 4, 5
D: 1, 2, 3
E: 1, 4, 5
Ben aşağıdaki sorguyu çalıştırdığınızda (bir beklendiği gibi), çok güzel bir onbeş rekor kartezyen ürün almak şöyledir: Kavşak Tablo Via, ben özelliklere atadınız. Yapmak istediğim ne
SELECT I.id, I.item_name, P.property_name FROM scratch.items I
JOIN scratch.junction J ON J.item_id = I.id
JOIN scratch.property P ON J.property_id = P.id;
yüzden bu gibi onları tükürür tek bir alana her öğenin özellik adlarını bitiştirmek geçerli:
Record | item_id | item_name | properties
----------------------------------------------------------------------------
0 | A | Item A | Property 1, Property 3, Property 5
1 | B | Item B | Property 1, Property 2, Property 3
2 | C | Item C | Property 1, Property 4, Property 5
3 | D | Item D | Property 1, Property 2, Property 3
4 | E | Item E | Property 1, Property 4, Property 5
----------------------------------------------------------------------------
benim yapmacık örnek aksine burada, her öğe herhangi bir sayı olabilir özellikleri (sıfır dahil).
Yani gerçekten tasarruf CSV verilerini bir sütunda. Bunu yapma. Varsa [Bağlantı Tabloları] 'na bakın (http://stackoverflow.com/a/32620163). Normalizasyon, hız, akıl, – Drew
Burada CSV yok. Kavşak Tablosu, diğer iki tablonun PK'larına işaret eden iki FK'den başka bir şey değildir. Bunu yapmaya çalışıyorum çünkü insan tarafından okunabilir bir görünüm oluşturmaya çalışıyorum ve uygulama mantığımdaki birleştirme işlemini yapmak istemiyorum. – Darkly
İnsan tarafından okunabilir görünüm, bir Görünüm'den oluşabilir. 'Find_in_set() 'ile bir araya gelmeden performans almayı beklemediğiniz sürece. Oldukça basmak için group_concat() 'yapmak bir şey. Güzel baskı çıktılarına dayanan verileri almak için iyi ayarlanmış bir db motoru beklemek başka bir şey. – Drew