select * from (select * from tasarim) as tsr
INNER JOIN tasarim_comment as ts ON ts.tasarimId = tsr.tasarimId
group by tsr.tasarimId
diye bir yapı var diyelim.
ben bunu böyle yaptığımda ne olacak?
bu query yi tasarımId ye göre gruplayacak. haliyle bana tasarıma ait commentlerden sadece 1er tanesi gelecek. halbuki ben istiyorum ki, bir parametre altında da şu gelsin:
tasarim_comments parametresi altında; (json ile örnekleyeceğim)
[
{
tasarim_commentId: 1,
comment: 'güzel},
{tasarim_commentId: 2,
comment: 'çirkin'
}
]
blabla bla.
bunu nasıl sağlyabilirim tek queryde?
group_concat içine concat vs. koyarak bir şeyler yapılıyor. ancak o sadece tek column için çalışıyor. bana sadece comment değil, commente ait id de lazım.
nasıl yapabilirim?
yapmaya çalıştığın şeyi json ile örneklediğin için mümkün geliyor olabilir sana ama bu sql tarafında mümkün değil.
çünkü sen dallanmış bir yapı istiyorsun, sql'de elde edebileceğin sonuç yatay.
tasarım-1
-----tasarım-1'e ait commentler
tasarım-2
-----tasarım-2'e ait commentler
gibi bir şey istiyorsun. ya da güncelden örnek vermek gerekirse instagram'da timeline'daki tüm paylaşımları ve her bir paylaşıma ait altındaki commentleri istiyorsun.
bunu tek query'de sql ile yapamazsın. araya bir dil daha sokman lazım, mesela c#'ta linq to sql ile istediğin şeyi elde edebilirsin. ama aslında arkada bir değil her bir tasarım için query çalışacaktır.
var query =
from tsr in db.tasarim
join ts in tasarim_comment on ts.tasarimId equals tsr.tasarimId
select new { tsr.name, tum_commentler = ts}
edit:
bir diğer yöntem de, tüm commentleri çekip(grupid'ye göre gruplamadan) yine ara dilde (php, c# ne ise) o liste üzerinden filtreleyerek json'daki istediğin yapıyı oluşturmak.