Ben ise döngüler sorguları kullanarak önlemek için çalışıyorum. Bu nedenle ben bir çapraz birleştirme kullanmalısınız sonuca geldik. Bu örneği ele alalım:
SELECT * FROM products
CROSS JOIN images USING (imgId)
CROSS JOIN productcolors ON colorsId = colorId
WHERE productId = 1
İki satır (aşağıda tablo yapısı) döndürmesi gerekir:
imgId | productId | colorId | imgSrc | colorName
1 1 1 img1_0.png copper
imgId | productId | colorId | imgSrc | colorName
1 1 1 img1_0.png slate
ve ne zaman productId'den = 2 tek satır dönmek gerekir:
imgId | productId | colorId | imgSrc | colorName
null 2 -1 null null
Görüntüler tablo aynı imgId birkaç colorIds / aynı değere sahip olacaktır olabilir productcolors için aynı applys ile birden fazla kayıt içermektedir. Ayrıca görüntüleri tabloda kayıt yok olabilir (eğer imgId örneğin = -1 ürünler tablosunda). Bu bir ürün yok renkleri vardır anlamına gelir. Şimdi, ben bu sorguyu ve görüntüleri tablo yapmak veya productcolors tablo imgId veya ColorID için hiçbir kayıt içerdiğinde sorgu hiçbir sonuç dönecektir. Ben bir sol dış gibi davranmak, boş değerler yerine bir şey değil dönen içeren satırdaki alanları gibi katılmak ve çapraz bir araya olacaktır.
Belki yerine benim whileloop sorguları olmalıdır? Bu sorunu yaklaşım için başka bir yolu olabilir mi?
EDIT: Benim masalar
products:
productId | colorsId | imgId
1 1 1
2 -1 -1 //product 2 has no images nor colors
productcolors:
colorId | colorName
1 copper
1 slate
images:
imgId | imgSrc
1 img1_0.png