Delphi Can

Orjinalini görmek için tıklayınız: Mysql İç İçe Yapılar
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba Arkadaşlar,

Basit Çaplı Bir ERP programı yazmaya çalışıyorum, (kendi kullanımımız için)

bu programda malzeme listeleri var,

örneğin

a, b, c, d,e malzemeleri olsun,

c malzemesinin ürün reçetesinde d,e malzemeleri var.

a malzemesinin ürün reçetesinde ise b,c malzemeleri var.

yani a malzemesinin detaylı ürün reçetesinde b,d,e var

iç içe şartlı sonsuz tekrarlı bu veriyi nasıl çekebilirim.

malzemeler ve reçetelerin kaydını tutan ayrı ayrı tablolar mevcut.
(29-06-2022, Saat: 13:48)YILDIRIMBEY Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba Arkadaşlar,

Basit Çaplı Bir ERP programı yazmaya çalışıyorum, (kendi kullanımımız için)

bu programda malzeme listeleri var,

örneğin

a, b, c, d,e malzemeleri olsun,

c malzemesinin ürün reçetesinde d,e malzemeleri var.

a malzemesinin ürün reçetesinde ise b,c malzemeleri var.

yani a malzemesinin detaylı ürün reçetesinde b,d,e var

iç içe şartlı sonsuz tekrarlı bu veriyi nasıl çekebilirim.

malzemeler ve reçetelerin kaydını tutan ayrı ayrı tablolar mevcut.

Merhabalar,

Sonsuz diye belirtiğiniz sorgunun sonucunda nasıl bir rapor alacaksınız?
Kendi adıma tam olarak anlayamadım.

İşlem sonucunda size veri olarak gelmesi gereken sonuç nedir?


JOIN
 

Kolay gelsin.
Selamlar
Konuyu tam olarak ben de anlayamadım. Ancak, sanırım Mamul, yarı mamul ve hammaddeden oluşan bir ürün ağacına ulaşmak istiyorsunuz.
Benim fikrim, ilk olarak;
A: Mamul
B: Yarı Mamul
C,D : Hammadde olarak düşünülmeli.
A ürününü oluşturan yarı mamulü sorgulayabilmek için, B yi, ve B yi oluşturan hammaddeleri sorgulamak gerekir.
Bunun için de, join ya da, bir döngü ile, hammaddelerden geriye doğru bağlı oldukları yarı mamülü ve ona bağlı olarak ta mamülü listeleyip bunu bir temp tabloya atmakta fayda var.
Tablo yapısı sanırım şu şekilde olur.

Hammadde YarıMamul Mamul
C B A
D B A
E F G
H F G

şeklinde düşünülebilir.
Alıntı:a, b, c, d,e malzemeleri olsun,

c malzemesinin ürün reçetesinde d,e malzemeleri var.

a malzemesinin ürün reçetesinde ise b,c malzemeleri var.

yani a malzemesinin detaylı ürün reçetesinde b,d,e var

iç içe şartlı sonsuz tekrarlı bu veriyi nasıl çekebilirim.

burda kast ettiğim a malzemesinin detaylı ürün reçetesini çekmek istediğimde  bana b ve c malzemelerini değil,

b,d,e malzemelerini vermesini istiyorum.

tablo yapım şu şekilde,

malzemeler, (malzeme bilgileri)
recete, (hangi malzemenin reçetesi olduğu kayıtları)
recetesatir, (ilgili reçetenin yapılması için gerekli alt malzemeler)

üç tablo da birbiriyle bağlantılı. (join yapısı ile)

delphi üzerinden fdconnection, fdquery ile bağlantı sağlıyorum.


Alıntı:Bunun için de, join ya da, bir döngü ile, hammaddelerden geriye doğru bağlı oldukları yarı mamülü ve ona bağlı olarak ta mamülü listeleyip bunu bir temp tabloya atmakta fayda var.

tam olarak bunu nasıl yapacağımı bilmiyorum. yani doğrudan mysql kodu içerisinde geriye doğru bağlı oldukları üst-alt reçeteleri nasıl iç içe listeletebilirim
(29-06-2022, Saat: 15:03)YILDIRIMBEY Adlı Kullanıcıdan Alıntı: [ -> ]
Alıntı:a, b, c, d,e malzemeleri olsun,

c malzemesinin ürün reçetesinde d,e malzemeleri var.

a malzemesinin ürün reçetesinde ise b,c malzemeleri var.

yani a malzemesinin detaylı ürün reçetesinde b,d,e var

iç içe şartlı sonsuz tekrarlı bu veriyi nasıl çekebilirim.

burda kast ettiğim a malzemesinin detaylı ürün reçetesini çekmek istediğimde  bana b ve c malzemelerini değil,

b,d,e malzemelerini vermesini istiyorum.

tablo yapım şu şekilde,

malzemeler, (malzeme bilgileri)
recete, (hangi malzemenin reçetesi olduğu kayıtları)
recetesatir, (ilgili reçetenin yapılması için gerekli alt malzemeler)

üç tablo da birbiriyle bağlantılı. (join yapısı ile)

delphi üzerinden fdconnection, fdquery ile bağlantı sağlıyorum.


Alıntı:Bunun için de, join ya da, bir döngü ile, hammaddelerden geriye doğru bağlı oldukları yarı mamülü ve ona bağlı olarak ta mamülü listeleyip bunu bir temp tabloya atmakta fayda var.

tam olarak bunu nasıl yapacağımı bilmiyorum. yani doğrudan mysql kodu içerisinde geriye doğru bağlı oldukları üst-alt reçeteleri nasıl iç içe listeletebilirim

Merhabalar,

Umarım doğru anlamışımdır.

Test etmek için >> https://www.db-fiddle.com/f/si5pHcCqqpJSccR9jX35Az/0 > sayfa açıldıktan sonra sol üst bölümde RUN tuşuna basmayı unutmayın lütfen.


drop table if exists malzemeler;
create table malzemeler (id integer, kodu varchar(100), adi varchar(100));
insert into malzemeler (id, kodu, adi) values (1, '001', 'İPLİK');
insert into malzemeler (id, kodu, adi) values (2, '002', 'KUMAŞ');
insert into malzemeler (id, kodu, adi) values (3, '003', 'DÜĞME');

drop table if exists recete;
create table recete (id integer, kodu varchar(100), adi varchar(100));
insert into recete (id, kodu, adi) values (1, '001', 'GÖMLEK');
insert into recete (id, kodu, adi) values (2, '002', 'ETEK');

drop table if exists recetesatir;
create table recetesatir (id integer, recete_id integer, malzemeler_id integer, miktar integer);
insert into recetesatir (id, recete_id, malzemeler_id, miktar) values (1, 1, 1,100);
insert into recetesatir (id, recete_id, malzemeler_id, miktar) values (2, 1, 2,111);
insert into recetesatir (id, recete_id, malzemeler_id, miktar) values (3, 2, 2,10);
insert into recetesatir (id, recete_id, malzemeler_id, miktar) values (4, 2, 3,11);




with tbl as ( 
 select 
  recetesatir.recete_id,
  malzemeler.id,
  malzemeler.kodu,
  malzemeler.adi,
 recetesatir.miktar
 from recetesatir 
 left join malzemeler on malzemeler.id=recetesatir.malzemeler_id
) 

select 
recete.kodu,
recete.adi,
tbl.* 
from recete
left join tbl on tbl.recete_id=recete.id

Kolay gelsin.
cevabınız için çok teşekkür ederim @hi_selamlar

sizin vermiş olduğunuz yapıya benzer olarak with .. as ile bir bileşen oluşturmadan doğrudan ilgili tabloları join yapısıyla bağlayabiliyorum.

benim kast ettiğim, iç içe geçmiş sonsuz alt malzeme listesi olabilir örnek vermek gerekirse,

bilgisayar => monitor + kasa set + fare + klavye + hoparlör
kasa set=> boş kasa + ekran kartı + psu set+ işlemci +...
psu set => psu + güç kablosu

sizin vermiş olduğunuz ve benim şu an yapabildiğim yöntemde bilgisayarın malzeme listesini select yaptığımda bana "monitor + kasa set + fare + klavye + hoparlör" sonucunu veriyor.

ama benim istediğim alt alta sonsuz sorgu yaparak;

"monitor + boş kasa + ekran kartı + psu + güç kablosu + işlemci+ fare + klavye + hoparlör" olarak çekebilmek.

yani kasa setin ve psu setin alt reçetelerini de sql tümleciği olarak iç içe sonsuz döngü ile sağlamak.

tabi database i kasmayacak yöntemler var ise tercih ederim Smile
(29-06-2022, Saat: 21:46)YILDIRIMBEY Adlı Kullanıcıdan Alıntı: [ -> ]cevabınız için çok teşekkür ederim @hi_selamlar

sizin vermiş olduğunuz yapıya benzer olarak with .. as ile bir bileşen oluşturmadan doğrudan ilgili tabloları join yapısıyla bağlayabiliyorum.

benim kast ettiğim, iç içe geçmiş sonsuz alt malzeme listesi olabilir örnek vermek gerekirse,

bilgisayar => monitor + kasa set + fare + klavye + hoparlör
kasa set=> boş kasa + ekran kartı + psu set+ işlemci +...
psu set => psu + güç kablosu

sizin vermiş olduğunuz ve benim şu an yapabildiğim yöntemde bilgisayarın malzeme listesini select yaptığımda bana "monitor + kasa set + fare + klavye + hoparlör" sonucunu veriyor.

ama benim istediğim alt alta sonsuz sorgu yaparak;

"monitor + boş kasa + ekran kartı + psu + güç kablosu + işlemci+ fare + klavye + hoparlör" olarak çekebilmek.

yani kasa setin ve psu setin alt reçetelerini de sql tümleciği olarak iç içe sonsuz döngü ile sağlamak.

tabi database i kasmayacak yöntemler var ise tercih ederim Smile

Dinamik sql cümlesi oluşturarak çözüm üretebileceğinizi tahmin ediyorum.

Şuraya göz atmanızda fayda var.

https://dev.mysql.com/doc/refman/8.0/en/...ments.html
(29-06-2022, Saat: 13:48)YILDIRIMBEY Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba Arkadaşlar,

Basit Çaplı Bir ERP programı yazmaya çalışıyorum, (kendi kullanımımız için)

bu programda malzeme listeleri var,

örneğin

a, b, c, d,e malzemeleri olsun,

c malzemesinin ürün reçetesinde d,e malzemeleri var.

a malzemesinin ürün reçetesinde ise b,c malzemeleri var.

yani a malzemesinin detaylı ürün reçetesinde b,d,e var

iç içe şartlı sonsuz tekrarlı bu veriyi nasıl çekebilirim.

malzemeler ve reçetelerin kaydını tutan ayrı ayrı tablolar mevcut.
Selamlar,
Sanırım, en son etapta, dışarıdan alınan malzemeden ne kadar kullanacağınızı bulmak istiyorsunuz. Bunun için Recursive query oluşturmanız gerekiyor. Bu da MySQL versiyonuna göre değişiyor. Şu sayfaya bir göz atarsanız size yararı dokunur.
https://stackoverflow.com/questions/2021...sive-query

Ayrıca şu linkte de bu komutu nasıl oluşturacağınızı anlatıyor:
https://dev.mysql.com/worklog/task/?id=3634

EK:
With komutu ile de yapılabiliyor. Kullanımı için şu sayfaya bakın lütfen.
https://dev.mysql.com/doc/refman/8.0/en/with.html

Bunları V8.0'dan eski versiyonlarda kullanamıyorsunuz.