Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

PHP/SQL sorusu


Öne çıkan mesajlar

Mesaj tarihi:
komik gelecek muhtemelen de bi türlü kafayı toplayıp yazamadım şunu. diyelim ki elimde şöyle 3 tane tablo var:



Objects
-------
ID
Parent
...

Languages
---------
ID
Name
Code
...

Names
--------
ObjID
LangID
Text
...



içlerinde de diyelim ki:



objects:
1, 0, ...

languages:
1, 'Türkçe', 'TR', ...
2, 'English', 'EN', ...

names:
1, 1, 'Türkçe isim', ...
1, 2, 'İngilizce isim', ...



gibi şeyler var. ulaşmaya çalıştığım nokta ise:



[
{
ID: 1,
Parent: 1,
Names: {
TR: "Türkçe isim",
EN: İngilizce isim,
..
}
},
...
]



böyle bir json üretmek. kafamın durduğu nokta bunu recursive bir sorgu halinde mi yazmak daha mantıklı olur yoksa iki parçaya ayırıp php tarafında mı birleştirmek daha mantıklı olur kısmı.

saygılar, sevgiler.
Mesaj tarihi:
Adım adım nasıl yaptığımı (sorguları) yazdım.
En sondaki istediğini veriyor.

Önemli olan, DB'den alabildiğini tek seferde almak; defalarca query gönderirsen yavaş olur.

Birkaç subselect'i kaldırmak mümkün olabilir, oturup incelemedim ama nasıl yapıldığını görebilmen için olabildiğince açık yazdım.

SELECT o.id
, o.parent
, l.name
, l.code
FROM names n
left join Objects o
on n.objid = o.id
left join languages l
on n.langid = l.id
;


SELECT o.id
, o.parent
, group_concat(concat(l.code,': ',n.text))
FROM names n
left join Objects o
on n.objid = o.id
left join languages l
on n.langid = l.id
group by o.id, o.parent
;


select concat('{'
, 'ID: ', id, ','
, 'Parent: ', parent, ','
, 'Names: {', names, '}'
, '}')
from (
SELECT o.id
, o.parent
, group_concat(concat(l.code,': ',n.text)) names
FROM names n
left join Objects o
on n.objid = o.id
left join languages l
on n.langid = l.id
group by o.id, o.parent
) t2
;


select concat(
'['
, group_concat(
rec
)
,']') json
from (
select concat('{'
, 'ID: ', id, ','
, 'Parent: ', parent, ','
, 'Names: {', names, '}'
, '}') rec
from (
SELECT o.id
, o.parent
, group_concat(concat(l.code,': ','"',n.text,'"')) names
FROM names n
left join Objects o
on n.objid = o.id
left join languages l
on n.langid = l.id
group by o.id, o.parent
) t2
) t3
;
  • 2 hafta sonra ...
  • 4 hafta sonra ...
Mesaj tarihi:
üzerinden çokça vakit geçmiş olmasına rağmen gerçekten çok teşekkür ediyorum. biraz değiştirip, biraz düzenleyip güzel bir şekle soktum ve tam olarak istediğim şeyi yaptı.
aylardır çok vakit ayıramıyorum sosyal ortamlara, o yüzden geç kalmış da olsa umarım kabul görür bu teşekkür.
×
×
  • Yeni Oluştur...