09-05-2012 22:17 tarihinde, Zekeriya Bozkurt yazdı:
> Elimde aşağıdaki şekilde yapılacak işlemler listesi var.
> Bir işlem başka bir işlemin yapılmasını gerektiriyor. Bir işlem için
> yapılacak malzemeler listesi var. Bir nevi üretim reçetesine benzettim
> kurulmuş olan yapıyı. Benden önce bir yapı kurulmuş ve bu yapıya
> müdahale etmeden diğer kalan işleri de tamamlamam gerekiyor. Ana işin
> kodundan hareketle ona bağlı olan tüm işleri ve malzemeleri bir view
> üzerinde görebilirsem kalan işleri de yapabileceğim.
Bir view üzerinde görmek çok uzak bir ihtimal olabilir, ve SQL üzerinde
bunu yazmak yerine, daha basit bir dille -PHP, Python, vb- yapmak çok
daha hızlı ve verimli bir çözüm olacaktır. Bence ihtiyacınız olan şey
recursion değil, iteration[1], küçük bir kod örneği gönderiyorum, genel
olarak mantığınız şöyle olmalı;
$items = array();
function hede($id) {
global $items;
/*
* Kendisini değil, sahibi bizim ilgilendiğimiz olan ürünleri
* kategorileri sorguluyoruz ki yelpaze gibi aşağıya doğru bir
* dağılım görelim.
*/
$ga = mysql_query(..... WHERE SahipId = $id .....);
if (mysql_num_rows($ga) > 0) {
for ($a = 0; $a < mysql_num_rows($ga); $a++) {
$aa = mysql_fetch_assoc($ga);
$items[$aa["Id"]] = $aa["Aciklama"];
}
return hede($aa["Id"]);
} else {
return $items;
}
}
Iteration'ı başlatmak için direkt olarak bir Id veya SahipId'si 0
olanları bir for() döngüsü ile verebilirsiniz, yani;
$kategoriler = hede(1);
print_r($kategoriler) çıktınız ise şöyle bir şey olacak;
array([1] => Elektrik [7] Şalt Malzemeleri [11] Otomatlar [17] 3x32A)
Aldığınız bu arrayi de başka bir tabloya lisan-ı münasip bir şekilde
kaydederseniz, kategori veya ürün ağacınızı kolayca görüntülenebilir
hale getirebilirsiniz, örneğin yukarıdaki arrayin bendeki çıktısı şöyle;
Ürün Adı: Elektrik ~ Şalt Malzemeleri ~ Otomatlar ~ 3x32A
Kodu test etmedim ve çok fazla eksiği var, sadece önünüzü görmeniz
açısından yolluyorum. Kendi kullandığım kodu göndermek istemedim, çünkü
çok spesifik olarak yazılmış ve başka bir framework'e göre uyarlanmış
durumda.
Bu arada iteration yöntemi ile giderseniz *sınırsız* kırılım yapabilirsiniz.
Kolay gelsin.
[1] http://en.wikipedia.org/wiki/Iteration
--
Omer Barlas
[email protected]
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php