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

Cevap