<?xml version="1.0" encoding="iso-8859-15"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 <title>TWiki Blog (comments)</title>
<subtitle type="html">Blogi deweloperów PLD/FreeBSD</subtitle>
<updated>2007-07-13T10:37:15Z</updated><link rel="self" type="application/atom+xml" href="http://wiki.pld-freebsd.org/bin/view/Blog/WebAtomComments" />
<link rel="alternate" type="text/html" hreflang="cs,da,de,en,es,fr,it,nl,pl,pt,ru,sv,zh-cn,zh-tw" href="http://wiki.pld-freebsd.org/bin/view/Blog/WebAtomComments" /><logo>http://wiki.pld-freebsd.org/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif</logo><generator uri="http://wiki.pld-freebsd.org/bin/view/TWiki/BlogPlugin">
  TWiki TWiki-4.1.2, Sat, 03 Mar 2007, build 13046, BlogPlugin $Rev: 11407$
</generator>
<id>tag:wiki.pld-freebsd.org,2008-05-18:Blog.WebAtomComments</id>
<rights>Copyright &#169; 2008</rights>
<entry>
<title>TomaszTrojanowski replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment8" />
<id>tag:wiki.pld-freebsd.org,2007-07-13:Blog.BlogComment8</id>
<updated>2007-07-13T10:37:15Z</updated>
<published>2007-07-13T10:37:15Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"> <p />Posypa&#322; si&#281; RAID, a ja niestety nie mam czasu &#380;eby przywróci&#263; go z backupów. azazel wróci jak tylko ukradn&#281; z czego&#347; troch&#281; czasu.<!-- -->
<!-- --></div>
</content>
<author>
<name>TomaszTrojanowski</name><uri>http://wiki.pld-freebsd.org/bin/viewMain/</uri></author>
<category term="" label="" />
<contributor>
<name>TomaszTrojanowski</name>
</contributor>
</entry>
<entry>
<title>spider replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment7" />
<id>tag:wiki.pld-freebsd.org,2007-07-13:Blog.BlogComment7</id>
<updated>2007-07-13T08:32:56Z</updated>
<published>2007-07-13T08:32:56Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"> <p />azazel did not response<!-- -->
<!-- --></div>
</content>
<author>
<name> spider</name><uri>http://wiki.pld-freebsd.org/bin/viewMain/</uri></author>
<category term="" label="" />
<contributor>
<name>PiotrSkwarna</name>
</contributor>
</entry>
<entry>
<title>TomaszTrojanowski replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment6" />
<id>tag:wiki.pld-freebsd.org,2007-02-16:Blog.BlogComment6</id>
<updated>2007-02-16T21:11:06Z</updated>
<published>2007-02-16T21:11:06Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"> <p />Nie jestem do ko&#324;ca przekonany, czy b&#281;dzie szybsze. Nawet je&#380;eli tak, to najprawdopodobniej
<pre>
SELECT DISTINCT id&#95;process AS p1 FROM task
  WHERE status &#61; &#39;completed&#39; AND
  NOT EXISTS (SELECT &#42; FROM task WHERE status &#60;&#62; &#39;completed&#39;  AND id&#95;process &#61; p1);
</pre>
b&#281;dzie jeszcze szybsze. Ale to nie o to chodzi.
<!-- -->
<!-- --></div>
</content>
<author>
<name>TomaszTrojanowski</name><uri>http://wiki.pld-freebsd.org/bin/viewMain/</uri></author>
<category term="" label="" />
<contributor>
<name>TomaszTrojanowski</name>
</contributor>
</entry>
<entry>
<title>MarcinGajda replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment5" />
<id>tag:wiki.pld-freebsd.org,2007-02-16:Blog.BlogComment5</id>
<updated>2007-02-16T10:07:37Z</updated>
<published>2007-02-16T10:07:37Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"><b>Wszystkie...</b> <p />No tak - maj&#261; by&#263; wszystkie. Wobec tego bij&#281; si&#281; w piersi, rzeczywi&#347;cie moje zapytanie nie daje poprawnego wyniku.
<p />
Mimo wszystko napisa&#322;bym to inaczej:
<p />
<pre>
SELECT id_process
  FROM task
  WHERE status = 'completed'
  GROUP BY id_process
EXCEPT
SELECT id_process
  FROM task
  WHERE status <> 'completed'
  GROUP BY id_process
</pre>
<p />
To zapytanie wci&#261;&#380; b&#281;dzie szybsze w planie wykonania od Twojego.
<!-- -->
<!-- --></div>
</content>
<author>
<name>MarcinGajda</name><uri>http://zboczuch.jogger.pl/</uri></author>
<category term="" label="" />
<contributor>
<name>MarcinGajda</name>
</contributor>
</entry>
<entry>
<title>TomaszTrojanowski replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment4" />
<id>tag:wiki.pld-freebsd.org,2007-02-16:Blog.BlogComment4</id>
<updated>2007-02-16T09:28:14Z</updated>
<published>2007-02-16T09:28:14Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"> <p />Przecie&#380; <code>SELECT id_process FROM task WHERE status = 'completed' GROUP BY id_process;</code> zwróci liste procesów które maj&#261; przynajmniej jedno zadanie zako&#324;czone, a nie liste procesów, w których wszystkie zadania zosta&#322;y zako&#324;czone. Nie widzisz tego?
<p />
Ca&#322;y problem le&#380;y w tym, &#380;eby uzyska&#263; list&#281; procesów, w których wszystkie zadania si&#281; zako&#324;czy&#322;y, u&#380;ycie <code>WHERE</code> w tym przypadku nic nie da, bo przed wykonaniem funkcji <code>COUNT</code> ograniczy zbiór poczatkowy do zada&#324; które si&#281; nie zako&#324;czy&#322;y (w przypadku <code>WHERE status &lt;&gt; 'completed'</code>) albo do zada&#324; które si&#281; zako&#324;czy&#322;y w przypadku <code>WHERE status = 'completed'</code>). Czyli u&#380;ywaj&#261;c <code>WHERE status = 'completed'</code> nie wiemy czy s&#261; w tak ograniczonej tabeli rekordy z status &lt;&gt; 'completed'
<p />
Na przyk&#322;adzie b&#281;dzie pro&#347;ciej. Przyjmijmy, &#380;e w tabela "task" wygl&#261;da tak (pomin&#261;&#322;em pierwsze pole bo jest nieistotne w tym wypadki):
<table style="border-width:1px;" cellspacing="0" cellpadding="0" class="twikiTable" border="1"><tr class="twikiTableEven"><th bgcolor="#6b7f93" align="center" valign="top" style="text-align:center;vertical-align:top;" class="twikiFirstCol" maxcols="0"> id_process </th><th bgcolor="#6b7f93" align="center" valign="top" style="text-align:center;vertical-align:top;" maxcols="0"> status </th></tr>
<tr class="twikiTableOdd"><td bgcolor="#ffffff" valign="top" style="vertical-align:top;" class="twikiFirstCol"> 1 </td><td bgcolor="#ffffff" valign="top" style="vertical-align:top;"> none </td></tr>
<tr class="twikiTableEven"><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;" class="twikiFirstCol"> 1 </td><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;"> running </td></tr>
<tr class="twikiTableOdd"><td bgcolor="#ffffff" valign="top" style="vertical-align:top;" class="twikiFirstCol"> 2 </td><td bgcolor="#ffffff" valign="top" style="vertical-align:top;"> completed </td></tr>
<tr class="twikiTableEven"><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;" class="twikiFirstCol"> 2 </td><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;"> completed </td></tr>
<tr class="twikiTableOdd"><td bgcolor="#ffffff" valign="top" style="vertical-align:top;" class="twikiFirstCol"> 3 </td><td bgcolor="#ffffff" valign="top" style="vertical-align:top;"> completed </td></tr>
<tr class="twikiTableEven"><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;" class="twikiFirstCol twikiLast"> 3 </td><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;" class="twikiLast"> running </td></tr>
</table>
Moje
<pre>
SELECT id&#95;process, COUNT(status !&#61; &#39;completed&#39; OR NULL) AS count FROM task
GROUP BY id&#95;process HAVING count &#61; 0;
</pre>
zwróci:
<table style="border-width:1px;" cellspacing="0" cellpadding="0" class="twikiTable" border="1"><tr class="twikiTableEven"><th bgcolor="#6b7f93" align="center" valign="top" style="text-align:center;vertical-align:top;" class="twikiFirstCol" maxcols="0"> id_process </th><th bgcolor="#6b7f93" align="center" valign="top" style="text-align:center;vertical-align:top;" maxcols="0"> count </th></tr>
<tr class="twikiTableOdd"><td bgcolor="#ffffff" valign="top" style="vertical-align:top;" class="twikiFirstCol twikiLast"> 2 </td><td bgcolor="#ffffff" valign="top" style="vertical-align:top;" class="twikiLast"> 0 </td></tr>
</table>
Twoje
<pre>
SELECT id&#95;process, COUNT(&#42;) AS count FROM task WHERE status &#61; &#39;completed&#39; GROUP BY id&#95;process;
</pre>
zwróci
<table style="border-width:1px;" cellspacing="0" cellpadding="0" class="twikiTable" border="1"><tr class="twikiTableEven"><th bgcolor="#6b7f93" align="center" valign="top" style="text-align:center;vertical-align:top;" class="twikiFirstCol" maxcols="0"> id_process </th><th bgcolor="#6b7f93" align="center" valign="top" style="text-align:center;vertical-align:top;" maxcols="0"> count </th></tr>
<tr class="twikiTableOdd"><td bgcolor="#ffffff" valign="top" style="vertical-align:top;" class="twikiFirstCol"> 2 </td><td bgcolor="#ffffff" valign="top" style="vertical-align:top;"> 2 </td></tr>
<tr class="twikiTableEven"><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;" class="twikiFirstCol twikiLast"> 3 </td><td bgcolor="#edf4f9" valign="top" style="vertical-align:top;" class="twikiLast"> 1 </td></tr>
</table>
Oczywiscie <code>count</code> jest nieistotne, ale te zapytania zwracaja zupe&#322;nie ró&#380;n&#261; liste procesów.
<p />
Rozumiesz juz o co chodzi czy mam t&#322;umaczy&#263; dalej.<!-- -->
<!-- --></div>
</content>
<author>
<name>TomaszTrojanowski</name><uri>http://wiki.pld-freebsd.org/bin/viewMain/</uri></author>
<category term="" label="" />
<contributor>
<name>TomaszTrojanowski</name>
</contributor>
</entry>
<entry>
<title>MarcinGajda replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment3" />
<id>tag:wiki.pld-freebsd.org,2007-02-16:Blog.BlogComment3</id>
<updated>2007-02-16T08:25:07Z</updated>
<published>2007-02-16T08:25:07Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"><b>Ale&#380;...</b> <p />SELECT id_process
  FROM task
  WHERE status = 'completed'
  GROUP BY id_process;
<p />
Co&#347; mi si&#281; wydaje, &#380;e owracasz jednak kota ogonem, zupe&#322;nie niepotrzebnie. Przeczytaj o WHERE, zanim zaczniej kombinowa&#263; po górk&#281;.
<p />
Dobrze by&#322;oby, gdyby&#347; te&#380; obejrza&#322; plan dla Twojego i mojego zapytania. Mo&#380;e wtedy by&#263; zrozumia&#322;, dlaczego Twoje podej&#347;cie jest co najmniej niew&#322;a&#347;ciwe.<!-- -->
<!-- --></div>
</content>
<author>
<name>MarcinGajda</name><uri>http://zboczuch.jogger.pl/</uri></author>
<category term="" label="" />
<contributor>
<name>MarcinGajda</name>
</contributor>
</entry>
<entry>
<title>TomaszTrojanowski replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment2" />
<id>tag:wiki.pld-freebsd.org,2007-02-15:Blog.BlogComment2</id>
<updated>2007-02-15T14:46:54Z</updated>
<published>2007-02-15T14:46:54Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"> <p />Fakt, b&#322;edem by&#322;o nie napisanie bezpo&#347;rednio do czego mi to pos&#322;u&#380;y. Wi&#281;c naprawiam ten b&#322;&#261;d, bo widz&#281; czytanie ze zrozumieniem to rzadka sztuka.
<p />
U&#380;ywaj&#261;c tej swojej klauzuli <code>WHERE</code> wylistuj wszystkie takie procesy, dla których wszystkie zadania (z tabeli "task") maj&#261; status 'completed'. Bo ja to zrobi&#281; tak:
<pre>
SELECT id&#95;process, COUNT(status !&#61; &#39;completed&#39; OR NULL) AS count FROM task GROUP BY id&#95;process HAVING count &#61; 0;
</pre>
<p />
Tylko &#380;eby Ci&#281; &#380;o&#322;&#261;dek nie rozbola&#322;, jak b&#281;dziesz si&#281; gimnastykowa&#322;.
<!-- -->
<!-- --></div>
</content>
<author>
<name>TomaszTrojanowski</name><uri>http://wiki.pld-freebsd.org/bin/viewMain/</uri></author>
<category term="" label="" />
<contributor>
<name>TomaszTrojanowski</name>
</contributor>
</entry>
<entry>
<title>Marcin Gajda  replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment1" />
<id>tag:wiki.pld-freebsd.org,2007-02-15:Blog.BlogComment1</id>
<updated>2007-02-15T13:07:55Z</updated>
<published>2007-02-15T13:07:55Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"><b>Tak...</b> <p />&#346;liczne? Prymitywne, hack taki, &#380;e a&#380; &#380;o&#322;&#261;dek boli. Wygl&#261;da na to, &#380;e nie doszed&#322;e&#347; jeszcze w nauce SQL do klauzuli WHERE...
<p />
SELECT id_process, COUNT(*)
  FROM task
  WHERE status &lt;&gt; 'completed'
  GROUP BY id_process;
<p />
Móg&#322;by&#347; te&#380; pomy&#347;le&#263; o przesiadce na baz&#281; danych (np. PostgreSQL), a nie korzysta&#263; z &#380;a&#322;osnej imitacji.<!-- -->
<!-- --></div>
</content>
<author>
<name>Marcin Gajda </name><uri>http://zboczuch.jogger.pl/</uri></author>
<category term="" label="" />
<contributor>
<name>MarcinGajda</name>
</contributor>
</entry>
<entry>
<title>JohnDoe replies on ""</title>
<link rel="alternate" type="text/html" href="http://wiki.pld-freebsd.org/bin/view/Blog/BlogComment0" />
<id>tag:wiki.pld-freebsd.org,2007-01-31:Blog.BlogComment0</id>
<updated>2007-01-31T21:24:25Z</updated>
<published>2007-01-31T21:24:25Z</published>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml"> <p />Tylko test<!-- -->
<!-- --></div>
</content>
<author>
<name>JohnDoe</name><uri>http://wiki.pld-freebsd.org/bin/viewMain/</uri></author>
<category term="" label="" />
<contributor>
<name>JohnDoe</name>
</contributor>
</entry> </feed>