<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <link rel="alternate" type="application/rss+xml" title="© 2007 Göksel DARCAN" href="/?rss" />
  <title>© 2007 Göksel DARCAN - Yazılarım - Etiket: SQL</title>

  <link rel="stylesheet" type="text/css" href="style.asp" media="screen">
  
	</head>
	
	<body>
	
 <table align="center" border="0" cellspacing="0" cellpadding="0" style="width:730px;height:600px;">
 <tr><td>
 
	<table align="center" border="0" cellpadding="0" cellspacing="0" class="master">
 
	

   <tr>
    <td colspan="2" style="height:90px;" align="center" style="vertical-align:bottom;"><a href="default.asp" onmouseover="document.getElementById('img_0').src='themes\/gothic\/menu0_.gif';" onmouseout="document.getElementById('img_0').src='themes\/gothic\/menu0.gif';"><img id="img_0" src="themes/gothic/menu0.gif"/></a><img id="img_1" src="themes/gothic/menu1_.gif"/><a href="photos.asp" onmouseover="document.getElementById('img_2').src='themes\/gothic\/menu2_.gif';" onmouseout="document.getElementById('img_2').src='themes\/gothic\/menu2.gif';"><img id="img_2" src="themes/gothic/menu2.gif"/></a><a href="visitors.asp" onmouseover="document.getElementById('img_3').src='themes\/gothic\/menu3_.gif';" onmouseout="document.getElementById('img_3').src='themes\/gothic\/menu3.gif';"><img id="img_3" src="themes/gothic/menu3.gif"/></a></td>
   </tr>
   <tr>
		<td colspan="2" style="height:30px;" align="right" style="vertical-align:bottom;padding-right:24px;padding-bottom:2px;">
    
			Yazılarda ara: <form name="searchform" style="display:inline" method="GET" action="posts.asp" onsubmit="return checksearch()"><input type="hidden" name="displayby" value="search"><input type="text" name="q" value="" style="background-image:url(themes/gothic/system-search.gif);background-position:middle left;background-repeat:no-repeat;padding-left:18px;"><input type="submit" value="ARA"></form>
			<script language="Javascript" type="text/javascript">
			function checksearch()
				{
				if(document.searchform.q.value.length < 3)
					{
					alert('Arama kriteri çok kısa !\n\nEn az 3 karakter uzunluğunda olmalıdır.');
					return false;
					}
				}
			</script>
		
    </td>
   </tr>
   <tr>
    <td style="width:200px;vertical-align:top;"><div style="height:480px;width:190px;overflow:auto;margin-left:10px;"><div class="divpost"><span class="heading1">Kategoriler :</span><br><a href="posts.asp?displayby=tags&tag=Genel" style="font-size:17px;">Genel</a> <a href="posts.asp?displayby=tags&tag=Motosiklet" style="font-size:11px;">Motosiklet</a> <a href="posts.asp?displayby=tags&tag=Komik" style="font-size:9px;">Komik</a> <a href="posts.asp?displayby=tags&tag=Security" style="font-size:10px;">Security</a> <a href="posts.asp?displayby=tags&tag=System" style="font-size:10px;">System</a> <a href="posts.asp?displayby=tags&tag=Windows" style="font-size:11px;">Windows</a> <a href="posts.asp?displayby=tags&tag=Siyasi" style="font-size:9px;">Siyasi</a> <a href="posts.asp?displayby=tags&tag=Tatar" style="font-size:9px;">Tatar</a> <a href="posts.asp?displayby=tags&tag=Yemek" style="font-size:9px;">Yemek</a> <a href="posts.asp?displayby=tags&tag=Mutfak" style="font-size:9px;">Mutfak</a> <a href="posts.asp?displayby=tags&tag=HTML" style="font-size:11px;">HTML</a> <a href="posts.asp?displayby=tags&tag=Javascript" style="font-size:11px;">Javascript</a> <a href="posts.asp?displayby=tags&tag=Müzik" style="font-size:11px;">Müzik</a> <a href="posts.asp?displayby=tags&tag=CSS" style="font-size:9px;">CSS</a> <a href="posts.asp?displayby=tags&tag=ASP" style="font-size:15px;">ASP</a> <a href="posts.asp?displayby=tags&tag=Yaşam" style="font-size:12px;">Yaşam</a> <a href="posts.asp?displayby=tags&tag=Sağlık" style="font-size:10px;">Sağlık</a> <a href="posts.asp?displayby=tags&tag=SQL" style="font-size:9px;">SQL</a> <a href="posts.asp?displayby=tags&tag=VBScript" style="font-size:9px;">VBScript</a> </div><div class="divpost"><span class="heading1">İstatistiki :</span><br><a href="posts.asp?displayby=updated">En son güncellenen 5</a><br><a href="posts.asp?displayby=views">En çok görüntülenen 5</a><br><a href="posts.asp?displayby=comments">En çok yorumlanan 5</a></div><div class="divpost" style="height:150px;overflow:auto;"><span class="heading1">Arşiv :</span><br><a href="posts.asp?displayby=date&date=12010">Ocak 2010 (1)</a><br><a href="posts.asp?displayby=date&date=122009">Aralık 2009 (1)</a><br><a href="posts.asp?displayby=date&date=22009">Şubat 2009 (1)</a><br><a href="posts.asp?displayby=date&date=102008">Ekim 2008 (1)</a><br><a href="posts.asp?displayby=date&date=82008">Ağustos 2008 (1)</a><br><a href="posts.asp?displayby=date&date=72008">Temmuz 2008 (1)</a><br><a href="posts.asp?displayby=date&date=62008">Haziran 2008 (3)</a><br><a href="posts.asp?displayby=date&date=122007">Aralık 2007 (2)</a><br><a href="posts.asp?displayby=date&date=112007">Kasım 2007 (1)</a><br><a href="posts.asp?displayby=date&date=102007">Ekim 2007 (2)</a><br><a href="posts.asp?displayby=date&date=92007">Eylül 2007 (1)</a><br><a href="posts.asp?displayby=date&date=82007">Ağustos 2007 (1)</a><br><a href="posts.asp?displayby=date&date=62007">Haziran 2007 (1)</a><br><a href="posts.asp?displayby=date&date=22007">Şubat 2007 (3)</a><br><a href="posts.asp?displayby=date&date=12007">Ocak 2007 (2)</a><br><a href="posts.asp?displayby=date&date=122006">Aralık 2006 (2)</a><br><a href="posts.asp?displayby=date&date=112006">Kasım 2006 (8)</a><br></div><div class="divpost">Online: 1 ziyaretçi<br>
69754 kere ziyaret edildi</div>
    </div></td>
    <td><div style="height:480px;width:590px;overflow:auto;padding-left:10px;" id="postsdiv">
<div id="masterdiv_28" class="divpost" style="height:75px;"><table border="0" cellspacing="0" cellpadding="0" style="width:539px;layout:fixed;"><tr><td><span class="posttitle">Recursive Product Count or Recursive Product Search</span><br>
<span class="tags">Etiketler : </span><span class="tagsdisp">ASP,SQL</span><br>
</td><td align="right" style="vertical-align:bottom;"><a onclick="if(document.getElementById('smdiv_28').style.display=='none'){document.getElementById('smdiv_28').style.display=''}else{document.getElementById('smdiv_28').style.display='none'}" target="xframe" title="E-posta olarak gönder"><img src="themes/gothic/forward.gif" alt="E-posta olarak gönder"></a><a id="adevam_28" onclick="togglepost(28,1)" title="Yazının devamı"><img id="imgdevam_28" src="themes/gothic/plus.gif" alt="Yazının devamı"></a></td></tr></table>
<table border="0" cellspacing="0" cellpadding="0" style="width:539px;layout:fixed;"><tr><td><span class="tags"><b><i>Eklenme tarihi : 12.10.2008 13:20:49</i></b></span><br>
<span class="tags"><b><i>Güncellenme tarihi : 12.10.2008 13:32:53</i></b></span></td>
<td style="vertical-align:top;text-align:right;"><div id="smdiv_28" style="display:none;"><form style="display:inline;" id="frmsm_28" method="POST" target="xframe" action="sendbymail.asp" onsubmit="return checkfrmsm(28);">
<input type="hidden" name="post_id" value="28"><input type="text" name="mailto" value=""><input type="submit" value="GÖNDER">
</form>
</div>
</td></tr></table><br>
<p>
<font face="tahoma,arial,helvetica,sans-serif">You want a recursive product search or display product count under a category tree.</font><a style="display: none" href="#">This article contains information about postgresql, pgsql, postgres, MS Access</a>
</p>
<p>
<font face="tahoma,arial,helvetica,sans-serif">Let's suppose that you have <em>categories</em> table like below;</font>
</p>
<table border="1" cellspacing="2" cellpadding="2">
	<tbody>
		<tr>
			<td>cat_id [serial NOT NULL]</td>
			<td>parent_id [numeric]</td>
			<td>category_name [character varying]</td>
		</tr>
		<tr>
			<td>1</td>
			<td>0</td>
			<td>Electrical &amp; Electronical</td>
		</tr>
		<tr>
			<td>2</td>
			<td>1</td>
			<td>Capacitor</td>
		</tr>
		<tr>
			<td>3</td>
			<td>1</td>
			<td>Inductor</td>
		</tr>
		<tr>
			<td>4</td>
			<td>0</td>
			<td>Tools &amp; Hardware</td>
		</tr>
		<tr>
			<td>5</td>
			<td>4</td>
			<td>Hand Tools</td>
		</tr>
		<tr>
			<td>6</td>
			<td>4</td>
			<td>Pneumatic Tools</td>
		</tr>
	</tbody>
</table>
<p>
<font face="tahoma,arial,helvetica,sans-serif">...and let's suppose that you have a products table like below;</font>
</p>
<table border="1" cellspacing="2" cellpadding="2">
	<tbody>
		<tr>
			<td>product_id [numeric]</td>
			<td>cat_id [numeric]</td>
			<td>product_name [character varying]</td>
		</tr>
		<tr>
			<td>1&nbsp;</td>
			<td>2</td>
			<td>Capacitor 1</td>
		</tr>
		<tr>
			<td>2</td>
			<td>2</td>
			<td>Capacitor 2</td>
		</tr>
		<tr>
			<td>3</td>
			<td>3</td>
			<td>Inductor 1</td>
		</tr>
		<tr>
			<td>4</td>
			<td>3</td>
			<td>Inductor 2</td>
		</tr>
		<tr>
			<td>5</td>
			<td>5</td>
			<td> Hand Tool1</td>
		</tr>
		<tr>
			<td>6</td>
			<td>5</td>
			<td> Hand Tool2</td>
		</tr>
		<tr>
			<td>7</td>
			<td>6</td>
			<td>Pneumatic Tool 1</td>
		</tr>
		<tr>
			<td>8</td>
			<td>6</td>
			<td>Pneumatic Tool 2</td>
		</tr>
	</tbody>
</table>
<p>
<font face="tahoma,arial,helvetica,sans-serif">You just only have to do is adding a new column cat_path [character varying] at each table and write a script to find the category paths and put them on the new column with a delimiter character (I used &quot;.&quot;)</font>
</p>
<table border="1" cellspacing="2" cellpadding="2">
	<tbody>
		<tr>
			<td>cat_id [serial NOT NULL]</td>
			<td>parent_id [numeric]</td>
			<td>category_name [character varying]</td>
			<td>cat_path</td>
		</tr>
		<tr>
			<td>1</td>
			<td>0</td>
			<td>Electrical &amp; Electronical</td>
			<td>.0.1.</td>
		</tr>
		<tr>
			<td>2</td>
			<td>1</td>
			<td>Capacitor</td>
			<td>.0.1.2.</td>
		</tr>
		<tr>
			<td>3</td>
			<td>1</td>
			<td>Inductor</td>
			<td>.0.1.3.</td>
		</tr>
		<tr>
			<td>4</td>
			<td>0</td>
			<td>Tools &amp; Hardware</td>
			<td>.0.4.</td>
		</tr>
		<tr>
			<td>5</td>
			<td>4</td>
			<td>Hand Tools</td>
			<td>.0.4.5.</td>
		</tr>
		<tr>
			<td>6</td>
			<td>4</td>
			<td>Pneumatic Tools</td>
			<td>.0.4.6.</td>
		</tr>
	</tbody>
</table>
<p>
<table border="1" cellspacing="2" cellpadding="2">
	<tbody>
		<tr>
			<td>product_id [numeric]</td>
			<td>cat_id [numeric]</td>
			<td>product_name [character varying]</td>
			<td>cat_path</td>
		</tr>
		<tr>
			<td>1&nbsp;</td>
			<td>2</td>
			<td>Capacitor 1</td>
			<td>.0.1.2.</td>
		</tr>
		<tr>
			<td>2</td>
			<td>2</td>
			<td>Capacitor 2</td>
			<td>.0.1.2.</td>
		</tr>
		<tr>
			<td>3</td>
			<td>3</td>
			<td>Inductor 1</td>
			<td>.0.1.3.</td>
		</tr>
		<tr>
			<td>4</td>
			<td>3</td>
			<td>Inductor 2</td>
			<td>.0.1.3.</td>
		</tr>
		<tr>
			<td>5</td>
			<td>5</td>
			<td> Hand Tool1</td>
			<td>.0.4.5.</td>
		</tr>
		<tr>
			<td>6</td>
			<td>5</td>
			<td> Hand Tool2</td>
			<td>.0.4.5.</td>
		</tr>
		<tr>
			<td>7</td>
			<td>6</td>
			<td>Pneumatic Tool 1</td>
			<td>.0.4.6.</td>
		</tr>
		<tr>
			<td>8</td>
			<td>6</td>
			<td>Pneumatic Tool 2</td>
			<td>.0.4.6.</td>
		</tr>
	</tbody>
</table>
</p>
<p>
<font face="tahoma,arial,helvetica,sans-serif">SQL (MS Access&trade;) query for product count under &quot;capacitor&quot; category:</font><font face="tahoma,arial,helvetica,sans-serif"><br />
</font><font face="tahoma,arial,helvetica,sans-serif">
</font><em><font color="#ff6600"><font face="arial,helvetica,sans-serif"><font size="2">SELECT * FROM products WHERE cat_path ~~ '%.2.%'&quot;,cnn,1,3</font></font></font></em><font face="tahoma,arial,helvetica,sans-serif"><br />
</font><font face="tahoma,arial,helvetica,sans-serif">
count = objRs.RecordCount
</font>
</p>
<font face="tahoma,arial,helvetica,sans-serif">
</font>
<p>
<font face="tahoma,arial,helvetica,sans-serif">
</font><font face="tahoma,arial,helvetica,sans-serif">SQL (POSTGRESQL) query for product count under &quot;capacitor&quot; category:</font><font face="tahoma,arial,helvetica,sans-serif"><br />
</font><font face="tahoma,arial,helvetica,sans-serif">
</font><em><font color="#ff6600"><font face="arial,helvetica,sans-serif"><font size="2">SELECT count(*) FROM products WHERE cat_path ~~ '%.2.%'&quot;,cnn,1,3</font></font></font></em><font face="tahoma,arial,helvetica,sans-serif"><br />
</font><font face="tahoma,arial,helvetica,sans-serif">
count = objRs(&quot;count&quot;)</font>
</p>
<p>
<font face="tahoma,arial,helvetica,sans-serif">SQL (POSTGRESQL) query for product search under &quot;capacitor&quot; category:</font><font face="tahoma,arial,helvetica,sans-serif"><br />
</font><font face="tahoma,arial,helvetica,sans-serif">
</font><em><font color="#ff6600"><font size="2"><font face="arial,helvetica,sans-serif">SELECT count(*) FROM products WHERE product_name ~~ ''%blah blah%' AND cat_path ~~ '%.2.%'&quot;,cnn,1,3</font></font></font></em><font face="tahoma,arial,helvetica,sans-serif"><br />
</font><font face="tahoma,arial,helvetica,sans-serif">
count = objRs(&quot;count&quot;)</font>
</p>
<p>
<font face="tahoma,arial,helvetica,sans-serif">Sample cat_path script written in vbscript (may load CPU to 100%):</font>
</p>
<textarea style="width:400px;height:300px">Set cnn = CreateObject(&quot;ADODB.Connection&quot;)
cnn.Open &quot;dsn=ODBC_DSN_NAME&quot;
Set rs = CreateObject(&quot;ADODB.Recordset&quot;)

Call catpath(0,&quot;.0.&quot;)

Set rs = Nothing
cnn.Close
Set cnn = Nothing

Wscript.Echo &quot;Finished !&quot;

Function catpath(cid,cpth)
	cids = Array()
	cpth = cpth
	rs.Open &quot;SELECT cat_id FROM categories WHERE parent_id=&quot; &amp; cid,cnn,1,3
	Do Until rs.EOF
		s = cpth &amp; rs(&quot;cat_id&quot;) &amp; &quot;.&quot;
		cid = rs(&quot;cat_id&quot;)
		Set rs2 = CreateObject(&quot;ADODB.Recordset&quot;)
		rs2.Open &quot;UPDATE products SET cat_path='&quot; &amp; s &amp; &quot;' WHERE cat_id=&quot; &amp; cid,cnn,1,3
		rs2.Open &quot;UPDATE categories SET cat_path='&quot; &amp; s &amp; &quot;' WHERE cat_id=&quot; &amp; cid,cnn,1,3
		Set rs2 = Nothing
		Redim Preserve cids(UBound(cids)+1)
		cids(UBound(cids)) = Array(cid,s)
		rs.MoveNext
	Loop
	rs.Close	
	For i = LBound(cids) To UBound(cids)
		Call catpath(cids(i)(0),cids(i)(1))
	Next
End Function</textarea><br>
<br>
<span class="tags"><b><i><span id="vcnt">20</span> kere görüntülendi...</i></b></span><br>
<a href="javascript:togglecomment('cm_28')">Yorum Ekle</a><br><div id="cm_28" style="display:none;width:570px;"><form target="xframe" id="frm_28" style="display:inline" method="POST" action="savecomment.asp" onsubmit="return checkform1('frm_28')">
<hr>
<span class="tags">Yorum Ekle</span><br>
<input type="hidden" name="post_id" value="28">
<table border="0" cellpadding="3" cellspacing="0" style="width:348px;table-layout:fixed;">
<tr><td align="right" style="width:84px;">Görünen Ad *: </td><td><input type="text" name="commenter_nick"></td></tr>
<tr><td align="right">E-Posta : </td><td><input type="text" name="commenter_email"></td></tr>
<tr><td align="right">Yorum *: </td><td><textarea name="comment_data" style="width:250px;height:150px;"></textarea></td></tr>
<tr><td></td><td><input type="submit" value="EKLE"></td></tr>
<tr><td colspan="2" style="background:#FF8;color:#000;font-size:10px;line-height:12px;font-weight:bold;text-align:justify;width:348px;padding:5px;">Not: E-posta adresiniz sadece yazdığınız mesajla ilgili durumlarda size ulaşabilmek amacıyla yönetici tarafından kullanılmak üzere istenmektedir. Sitenin veya internet'in hiçbir yerinde yayınlanmayacaktır. E-posta adresinizi yazma zorunluluğunuz yoktur.</td></tr>
</table>
</form>
</div>
</div>
<br>
<table style="display:inline" border="0" cellspacing="2" cellpadding="0"><tr></tr></table><form target="xframe" style="display:inline;" name="frmreadpost" method="POST" action="readpost.asp">
<input type="hidden" name="post_id">
</form>
<script language="Javascript" type="text/javascript">
var stdhgt = document.getElementById('masterdiv_28').style.height.replace('px','')*2/2;
var pcnt = 1;
function togglecomment(cid)
 {
  if (document.getElementById(cid).style.display == 'none')
   {
    document.getElementById(cid).style.display = '';
   }
  else
   {
    document.getElementById(cid).style.display = 'none';
   }
 }
function checkform1(fid)
 {
  var frm = document.getElementById(fid);
  if(frm.commenter_nick.value=='')
   {
    alert('Nickname yazınız');
    return false;
   }
  if(frm.comment_data.value=='')
   {
    alert('Yorum yazınız');
    return false;
   }
  frm.submit();
  frm.commenter_nick.value='';
  frm.commenter_email.value='';
  frm.comment_data.value='';
  return false;
 }
function checkfrmsm(fid)
 {
  var frm = document.getElementById('frmsm_'+fid);
  if(frm.mailto.value=='')
   {
    alert('E-posta adresi yazınız !');
    return false;
   }
  if(frm.mailto.value.search('@') < 0)
   {
    alert('Geçerli bir e-posta adresi yazınız !');
    return false;
   }
  frm.submit();
  frm.mailto.value='';
  document.getElementById('smdiv_'+fid).style.display='none';
  return false;
 }
function togglepost(pid,scnt)
 {
  if(document.getElementById('masterdiv_'+pid).style.overflow=='visible')
   {
    document.getElementById('masterdiv_'+pid).style.overflow='hidden';
    document.getElementById('masterdiv_'+pid).style.height=stdhgt+'px';
    document.getElementById('imgdevam_'+pid).src='themes\/gothic\/plus.gif';
   }
  else
   {
    if(document.getElementById('masterdiv_28').style.overflow=='visible')
     {
      document.getElementById('masterdiv_28').style.overflow='hidden';
      document.getElementById('masterdiv_28').style.height=stdhgt+'px';
      document.getElementById('imgdevam_28').src='themes\/gothic\/plus.gif';
     }
    document.getElementById('masterdiv_'+pid).style.overflow='visible';
    document.getElementById('masterdiv_'+pid).style.height='auto';
    document.getElementById('imgdevam_'+pid).src='themes\/gothic\/minus.gif';
    document.getElementById('imgdevam_'+pid).src='themes\/gothic\/minus.gif';
    document.getElementById('postsdiv').scrollTop=((scnt-1)*(stdhgt+29));
    document.getElementById('vcnt').innerHTML = (document.getElementById('vcnt').innerHTML*2/2)+1;
    document.frmreadpost.post_id.value=pid;
    document.frmreadpost.submit();
   }
 }
</script>
<iframe frameborder="0" name="xframe" width="0" height="0" src="about:blank"></iframe>    </div></td>
   </tr>
  </table>
  </td>
  <td>

	<div class="divpost" style="width:130px;padding:0px;text-align:center;">

<script type="text/javascript"><!--
google_ad_client = "pub-3227559277969830";
//120x600, oluşturulma 30.11.2007
google_ad_slot = "6174438679";
google_ad_width = 120;
google_ad_height = 600;
//--></script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

	</div>

  </td>
  </tr>
  </table>


  <a style="position:absolute;right:5px;top:0px;text-decoration:none;" href="login.asp">&nbsp;&nbsp;&nbsp;&nbsp;</a>

 </body>
</html>

