Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Mysql İç İçe Yapılar
#1
Question 
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.
There is no place like "127.0.0.1"

"Vatanını en çok seven, görevini en iyi yapandır."

Cevapla
#2
(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.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
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.
Yazılımcı, kahveyi koda çeviren bir organizmadır.
Cevapla
#4
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
There is no place like "127.0.0.1"

"Vatanını en çok seven, görevini en iyi yapandır."

Cevapla
#5
(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.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#6
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
There is no place like "127.0.0.1"

"Vatanını en çok seven, görevini en iyi yapandır."

Cevapla
#7
(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
Cevapla
#8
(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.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MySQL Editör önerisine ihyacım var. yhackup 12 3.412 29-01-2025, Saat: 11:35
Son Yorum: ercanskose
  MySQL - Sql-mode only_full_group_by hatası. hi_selamlar 5 3.567 25-12-2022, Saat: 10:43
Son Yorum: hi_selamlar
  MySQL Bağlantı Sorunu - MEB akıllı tahta Frrst 6 3.430 10-11-2022, Saat: 23:16
Son Yorum: mcuyan
  Mysql Farklı bir autoinc mcuyan 11 4.986 09-11-2022, Saat: 23:05
Son Yorum: mcuyan
  Delphi 7 MySql DAC Nasıl Kurulur mahone 1 1.586 08-10-2022, Saat: 22:09
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi