<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dev.baczyk.net</title>
	<atom:link href="http://dev.baczyk.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.baczyk.net</link>
	<description>zapiski programisty przeróżne</description>
	<lastBuildDate>Thu, 18 Feb 2010 20:04:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Liczba dni (kolejnych / roboczych) pomiędzy dwiema datami</title>
		<link>http://dev.baczyk.net/2010/02/18/liczba-dni-kolejnych-roboczych-pomiedzy-dwiema-datami/</link>
		<comments>http://dev.baczyk.net/2010/02/18/liczba-dni-kolejnych-roboczych-pomiedzy-dwiema-datami/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 19:53:38 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://dev.baczyk.net/?p=352</guid>
		<description><![CDATA[Kolejna notka z dziedziny baz danych. Dzisiaj chciałbym pokazać w jaki sposób wyliczyć ilość dni (oraz ilość dni roboczych w drugim przykładzie) pomiędzy dwoma datami. Do tego celu posłużymy się naszą tabelką prac. Struktura DB wraz z przykładowymi danymi dla omawianych zagadnień znajduje się tutaj. Dla przypomnienia, tak wygląda tabelka, na której przeprowadzimy nasze ćwiczenia: [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejna notka z dziedziny baz danych.</p>
<p>Dzisiaj chciałbym pokazać w jaki sposób wyliczyć ilość dni (oraz ilość dni roboczych w drugim przykładzie) pomiędzy dwoma datami. Do tego celu posłużymy się naszą tabelką <em>prac</em>.</p>
<p class="important">Struktura DB wraz z przykładowymi danymi dla omawianych zagadnień znajduje się <a class="html" href="http://dev.baczyk.net/2009/07/04/szkic-db-na-potrzeby-cwiczen/">tutaj</a>.</p>
<p>Dla przypomnienia, tak wygląda tabelka, na której przeprowadzimy nasze ćwiczenia:</p>
<pre class="brush: sql; title: ;">mysql&gt; select * from prac;
+----+------------+------------+------------+---------+--------+-----------+
| id | nazwisko   | stanowisko | data_zatr  | wyplata | premia | id_dzialu |
+----+------------+------------+------------+---------+--------+-----------+
|  1 | Kowalski   | sprzedawca | 2005-07-13 |    1600 |    300 |        30 |
|  2 | Malinowski | menadżer   | 2005-09-13 |    2489 |      0 |        30 |
|  3 | Grabski    | analityk   | 2006-07-15 |    1458 |      0 |        20 |
|  4 | Bielecki   | księgowy   | 2006-03-12 |    1236 |      0 |        10 |
|  5 | Kurtyka    | dyrektor   | 2006-04-17 |   11369 |      0 |        10 |
|  6 | Dąbkowski  | księgowy   | 2002-04-13 |    1236 |      0 |        10 |
|  7 | Kononowicz | analityk   | 2006-04-11 |    3548 |      0 |        20 |
|  8 | Janczak    | księgowy   | 2002-01-10 |    3699 |      0 |        10 |
|  9 | Kamiński   | sprzedawca | 2007-09-07 |    1365 |    658 |        30 |
| 10 | Czechowski | analityk   | 2009-01-03 |    3547 |      0 |        20 |
| 11 | Duchnowski | sprzedawca | 2007-09-03 |    1687 |    356 |        30 |
| 12 | Różański   | sprzedawca | 2007-09-07 |    1999 |    200 |        30 |
+----+------------+------------+------------+---------+--------+-----------+
12 rows in set (0.00 sec)
</pre>
<p><strong>1. Jak policzyć ilość kolejnych dni pomiędzy dwoma datami?</strong></p>
<p>Do rozwiązania postawionego problemu przyda nam się wbudowana funkcja <a href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff">datediff()</a>. W jednym zapytaniu pobieramy obie z interesujących nas dat (w tym przypadku daty zatrudnienia Kowalskiego i Malinowskiego) i podstawiamy je do wspomnianej funkcji:</p>
<pre class="brush: sql; title: ;">
mysql &gt; SELECT ABS(DATEDIFF(kowalski_data,malinowski_data)) AS roznica FROM
(SELECT data_zatr AS kowalski_data FROM prac WHERE nazwisko = 'Kowalski') X,
(SELECT data_zatr AS malinowski_data FROM prac WHERE nazwisko = 'Malinowski') Y;
</pre>
<p>Wynik działania naszego zapytania:</p>
<pre class="brush: sql; title: ;">
+---------+
| roznica |
+---------+
|      62 |
+---------+
1 row in set (0.00 sec)
</pre>
<p>Oczywiście z funkcji ABS() korzystamy po to, aby wynik naszych obliczeń był zawsze dodatni.</p>
<p><strong>2. Jak policzyć ilość roboczych dni pomiędzy dwoma datami?</strong><span id="more-352"></span></p>
<p>Drugi przykład jest nieco trudniejszy. Aby odpowiedzieć na postawione pytanie będziemy musieli skorzystać dodatkowo z przestawnej tabeli <em>p500</em>. Jest to tabela o kolejnych indeksach od 1 do 500, o takiej strukturze:</p>
<pre class="brush: sql; title: ;">
mysql&gt; select * from p500;
+-----+
|  id |
+-----+
|   1 |
|   2 |
|   3 |
|   4 |
|   5 |
|   6 |
|   7 |
|   8 |
|   9 |
|  10 |
| ... |
| 500 |
+-----+
500 rows in set (0.00 sec)
</pre>
<p>Samo zapytanie wygląda natomiast tak:</p>
<pre class="brush: sql; title: ;">
SELECT SUM(
   CASE WHEN DATE_FORMAT(
      DATE_ADD(
         kowalski_data,INTERVAL p500.id-1 DAY
      ), '%a'
   ) IN ('Sat','Sun') THEN 0 ELSE 1
   END
) AS dni

FROM
   (
      SELECT MAX(CASE WHEN nazwisko = 'Kowalski' THEN data_zatr END) AS kowalski_data,
      MAX(CASE WHEN nazwisko = 'Malinowski' THEN data_zatr END) AS malinowski_data FROM prac
   ) X,
   p500

WHERE p500.id &lt;= DATEDIFF(malinowski_data,kowalski_data)+1
</pre>
<p>Natomiast wynik jego działania:</p>
<pre class="brush: sql; title: ;">
+------+
|  dni |
+------+
|   45 |
+------+
1 row in set (0.00 sec)
</pre>
<p>Kilka słów wyjaśnienia:<br />
Całe postępowanie można podzielić na dwa kroki:<br />
1) w pierwszym zwracamy listę dni dzielących obie daty &#8211; uwzględniając skrajne dni</p>
<pre class="brush: sql; title: ;">
SELECT *

FROM
   (
      SELECT MAX(CASE WHEN nazwisko = 'Kowalski' THEN data_zatr END) AS kowalski_data,
      MAX(CASE WHEN nazwisko = 'Malinowski' THEN data_zatr END) AS malinowski_data FROM prac
   ) X,
   p500

WHERE p500.id &lt;= DATEDIFF(malinowski_data,kowalski_data)

+---------------+-----------------+----+
| kowalski_data | malinowski_data | id |
+---------------+-----------------+----+
| 2005-07-13    | 2005-09-13      |  1 |
| 2005-07-13    | 2005-09-13      |  2 |
| 2005-07-13    | 2005-09-13      |  3 |
| 2005-07-13    | 2005-09-13      |  4 |
| 2005-07-13    | 2005-09-13      |  5 |
| 2005-07-13    | 2005-09-13      |  6 |
| 2005-07-13    | 2005-09-13      |  7 |
| 2005-07-13    | 2005-09-13      |  8 |
| 2005-07-13    | 2005-09-13      |  9 |
| 2005-07-13    | 2005-09-13      | 10 |
| 2005-07-13    | 2005-09-13      | 11 |
| 2005-07-13    | 2005-09-13      | 12 |
| 2005-07-13    | 2005-09-13      | 13 |
| 2005-07-13    | 2005-09-13      | 14 |
| 2005-07-13    | 2005-09-13      | 15 |
| 2005-07-13    | 2005-09-13      | 16 |
| 2005-07-13    | 2005-09-13      | 17 |
| 2005-07-13    | 2005-09-13      | 18 |
| 2005-07-13    | 2005-09-13      | 19 |
| 2005-07-13    | 2005-09-13      | 20 |
| 2005-07-13    | 2005-09-13      | 21 |
| 2005-07-13    | 2005-09-13      | 22 |
| 2005-07-13    | 2005-09-13      | 23 |
| 2005-07-13    | 2005-09-13      | 24 |
| 2005-07-13    | 2005-09-13      | 25 |
| 2005-07-13    | 2005-09-13      | 26 |
| 2005-07-13    | 2005-09-13      | 27 |
| 2005-07-13    | 2005-09-13      | 28 |
| 2005-07-13    | 2005-09-13      | 29 |
| 2005-07-13    | 2005-09-13      | 30 |
| 2005-07-13    | 2005-09-13      | 31 |
| 2005-07-13    | 2005-09-13      | 32 |
| 2005-07-13    | 2005-09-13      | 33 |
| 2005-07-13    | 2005-09-13      | 34 |
| 2005-07-13    | 2005-09-13      | 35 |
| 2005-07-13    | 2005-09-13      | 36 |
| 2005-07-13    | 2005-09-13      | 37 |
| 2005-07-13    | 2005-09-13      | 38 |
| 2005-07-13    | 2005-09-13      | 39 |
| 2005-07-13    | 2005-09-13      | 40 |
| 2005-07-13    | 2005-09-13      | 41 |
| 2005-07-13    | 2005-09-13      | 42 |
| 2005-07-13    | 2005-09-13      | 43 |
| 2005-07-13    | 2005-09-13      | 44 |
| 2005-07-13    | 2005-09-13      | 45 |
| 2005-07-13    | 2005-09-13      | 46 |
| 2005-07-13    | 2005-09-13      | 47 |
| 2005-07-13    | 2005-09-13      | 48 |
| 2005-07-13    | 2005-09-13      | 49 |
| 2005-07-13    | 2005-09-13      | 50 |
| 2005-07-13    | 2005-09-13      | 51 |
| 2005-07-13    | 2005-09-13      | 52 |
| 2005-07-13    | 2005-09-13      | 53 |
| 2005-07-13    | 2005-09-13      | 54 |
| 2005-07-13    | 2005-09-13      | 55 |
| 2005-07-13    | 2005-09-13      | 56 |
| 2005-07-13    | 2005-09-13      | 57 |
| 2005-07-13    | 2005-09-13      | 58 |
| 2005-07-13    | 2005-09-13      | 59 |
| 2005-07-13    | 2005-09-13      | 60 |
| 2005-07-13    | 2005-09-13      | 61 |
| 2005-07-13    | 2005-09-13      | 62 |
+---------------+-----------------+----+
62 rows in set (0.00 sec)
</pre>
<p>2) w drugim dokonujemy sumowania:</p>
<pre class="brush: sql; title: ;">
SUM(
   CASE WHEN DATE_FORMAT(
      DATE_ADD(
         kowalski_data,INTERVAL p500.id-1 DAY
      ), '%a'
   ) IN ('Sat','Sun') THEN 0 ELSE 1
   END
) AS dni
</pre>
<p>które polega na tym, iż &#8222;przechodzimy&#8221; po poprzedniej liście i za każdym razem dodajemy do daty (kowalski_data) ilość dni określoną przez id-1 (dlatego -1, aby uwzględnić w naszym sumowaniu pierwszy dzień z listy), po czym sprawdzamy czy ten dzień nie wypada czasem w weekend (Sat, Sun) &#8211; jeśli tak, to nie uwzględniamy go w naszej sumie (wyrażenie CASE).</p>
<p>I to tyle na dzisiaj, zapraszam ponownie w bliżej nieokreślonej przyszłości.</p>
<p style="text-align:right"><em>Przykłady zaczerpnięte z książki &#8222;SQL Receptury&#8221; Athony&#8217;ego Molinaro.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2010/02/18/liczba-dni-kolejnych-roboczych-pomiedzy-dwiema-datami/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ku pamięci &#8211; problem z &lt;?= short open tag</title>
		<link>http://dev.baczyk.net/2010/01/04/ku-pamieci-short_open_tag/</link>
		<comments>http://dev.baczyk.net/2010/01/04/ku-pamieci-short_open_tag/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 11:35:12 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://dev.baczyk.net/?p=339</guid>
		<description><![CDATA[Niejednokrotnie już spotkałem się z pytaniem od początkujących programistów dlaczego na ich lokalnym serwerze &#60;?= działa bez zarzutu, a po przeniesieniu kodu na serwer docelowy krótkie tagi nie działają, muszą wówczas używać &#60;?php echo. Nawet w ostatnich dniach temat ten powrócił jak bumerang, tym razem na polskim forum Zend&#8217;a (co notabene stało się przyczyną do [...]]]></description>
			<content:encoded><![CDATA[<p>Niejednokrotnie już spotkałem się z pytaniem od początkujących programistów dlaczego na ich lokalnym serwerze <b>&lt;?=</b> działa bez zarzutu, a po przeniesieniu kodu na serwer docelowy krótkie tagi nie działają, muszą wówczas używać <b>&lt;?php echo</b>. Nawet w ostatnich dniach temat ten powrócił jak bumerang, tym razem na <a href="http://zend-framework.pl/forum/viewtopic.php?pid=4811">polskim forum Zend&#8217;a</a> (co notabene stało się przyczyną do popełnienia tego wpisu).</p>
<p>Tak więc należy pamiętać, że</p>
<p class="important">używanie krótkich tagów jest niezalecane przez większość programistów i twórców oprogramowania, jeśli tylko istnieje ryzyko, iż na serwerze docelowym nie będziemy mieli dostępu do pliku konfiguracyjnego php.ini</p>
<p>W pliku tym należy zmienić linię <em>&#8222;short_open_tag = Off&#8221;</em> na <em>&#8222;short_open_tag = On&#8221;</em>, a następnie zrestartować serwer. Oczywiście może okazać się, że mimo braku dostępu do tego pliku na serwerze, wpis będzie ustawiony zgodnie z naszymi oczekiwaniami. Nie mniej jednak warto ustalić ten fakt jeszcze zanim zdecydujemy się używać krótkich tagów w naszej aplikacji.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2010/01/04/ku-pamieci-short_open_tag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rezygnuję z GG</title>
		<link>http://dev.baczyk.net/2009/12/28/rezygnuje-z-gg/</link>
		<comments>http://dev.baczyk.net/2009/12/28/rezygnuje-z-gg/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 13:41:43 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://dev.baczyk.net/2009/12/28/rezygnuje-z-gg/</guid>
		<description><![CDATA[Uwaga! Od 1 stycznia 2010 rezygnuje z korzystania z sieci Gadu-Gadu. Od tej chwili kontakt ze mną możliwy będzie za pośrednictwem sieci Jabber oraz Skype. jid: slawek@baczyk.net &#8211; google talk jid: slawomir.baczyk@jabber.wp.pl skype: slawomir.baczyk]]></description>
			<content:encoded><![CDATA[<p><strong style="color:red">Uwaga!</strong> Od 1 stycznia 2010 rezygnuje z korzystania z sieci Gadu-Gadu.<br />
Od tej chwili kontakt ze mną możliwy będzie za pośrednictwem sieci <strong>Jabber</strong> oraz <strong>Skype</strong>.</p>
<ul>
<li>jid: <strong>slawek@baczyk.net</strong> &#8211; google talk</li>
<li>jid: <strong>slawomir.baczyk@jabber.wp.pl</strong></li>
<li>skype: <strong>slawomir.baczyk</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/12/28/rezygnuje-z-gg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery.Autocomplete &#8211; magiczne podpowiedzi</title>
		<link>http://dev.baczyk.net/2009/12/24/jquery-autocomplete-magiczne-podpowiedzi/</link>
		<comments>http://dev.baczyk.net/2009/12/24/jquery-autocomplete-magiczne-podpowiedzi/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 15:00:57 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery Autocomplete]]></category>

		<guid isPermaLink="false">http://dev.baczyk.net/?p=268</guid>
		<description><![CDATA[Jednak tak jak się spodziewałem, z powodu braku czasu, nie udaje mi się pisać tyle ile bym chciał. Może po obronie pracy inżynierskiej czas pozwoli na większą aktywność. Ale do rzeczy, dzisiaj chciałbym zainteresować wszystkich kolejnym pluginem do jQuery &#8211; jQuery.Autocomplete. Jeśli zastanawialiście się jak wykonać podpowiedzi w stylu Googla, to w tej notce znajdziecie [...]]]></description>
			<content:encoded><![CDATA[<p>Jednak tak jak się spodziewałem, z powodu braku czasu, nie udaje mi się pisać tyle ile bym chciał. Może po obronie pracy inżynierskiej czas pozwoli na większą aktywność.</p>
<p>Ale do rzeczy, dzisiaj chciałbym zainteresować wszystkich kolejnym pluginem do jQuery &#8211; <strong>jQuery.Autocomplete</strong>. Jeśli zastanawialiście się jak wykonać podpowiedzi w stylu Googla, to w tej notce znajdziecie namiastkę odpowiedzi na to pytanie.</p>
<p>Osobiście z wspomnianą już wtyczką spotkałem się kiedy chciałem uzyskać efekt podpowiedzi w tworzonym formularzu, tak aby potencjalnemu użytkownikowi tworzonego właśnie serwisu podpowiedzieć wpisywaną miejscowość (jedno z wymaganych pół w tymże formularzu).</p>
<p>Efekt ten można wykorzystać w wielu miejscach by podpowiedzieć użytkownikowi dokończenie wpisywanej przez niego frazy, kiedy to tworzymy różnego rodzaju formularze, czy to rejestracji, czy też wyszukiwania.</p>
<p><span id="more-268"></span></p>
<p>Aby uzyskać efekt autopodpowiedzi na naszej stronie, potrzebne nam będą:</p>
<ul>
<li> biblioteka jQuery – do pobrania ze strony <a href="http://jquery.com/">http://jquery.com/</a></li>
<li> wtyczka jQuery.Autocomplete – do pobrania ze strony autora <a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/">http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/</a></li>
<li> i jak zawsze &#8211; odrobina czasu i dobrych chęci <img src='http://dev.baczyk.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<p>Przyjrzyjmy się działaniu wtyczki w akcji:</p>
<div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-autocomplete1.php" frameborder="0" style="height:970px;width:610px;">Please upgrade your browser</iframe>
</div>
<p>Jak widać na powyższym przykładzie, jednym z parametrów jaki trafia do f-cji <em>autocomplete()</em> są dane w postaci spreparowanej tablicy z miastami. Nie jest to jedyny sposób zaserwowania zestawu danych, które zostaną wykorzystane przez ten plugin. O pozostałych sposobach przeczytasz nieco niżej. Wcześniej jednak zapoznajmy się z pozostałymi parametrami tej f-cji i przeanalizujmy jej możliwości.</p>
<p>Jak podaje dokumentacja pełne wywołanie f-cji <em>autocomplete()</em> ma postać:</p>
<pre class="brush: jscript; title: ;">$(uchwyt).autocomplete( url or data, [options] );</pre>
<p>Podkreślone wartości, są wartościami domyślnymi.</p>
<ol>
<li><em>autoFill</em> &#8211; true/<u>false</u> &#8211; w trakcie wpisywania, nasz input zostanie automatycznie wypełniony pierwszą z pasujących wartości</li>
<li><em>cacheLength</em> &#8211; <u>10</u> &#8211; ten parametr określa ile wyników z zewnętrznego źródła zostanie zapamiętanych w pamięci podręcznej skryptu</li>
<li><em>delay</em> &#8211; <u>400</u> ms dla źródeł zdalnych i <u>10</u> ms dla źródeł lokalnych &#8211;  definiujemy czas (w milisekundach) po którym podpowiedzi są aktywowane (czas liczony od wciśnięcia klawisza)</li>
<li><em>extraParams</em> &#8211; tej opcji używamy gdy chcemy przekazać jakieś dodatkowe parametry do skryptu za pomocą, którego będziemy pobierać dane z zewnętrznego źródła, np.: ustawienie wartości tego pola na: <em>{zmienna: 4}</em> spowoduje takie wywołanie: <em>nasz_skrypt.php?q=fraza&amp;zmienna1=4</em> &#8211; &#8222;fraza&#8221; to szukane przez nas słowo, parametry przekazywane są poprzez $_GET, ale o tym nieco niżej</li>
<li><em>formatItem, formatMatch, formatResult</em> &#8211; 3 funkcje które pozwalają sformatować kolejno: pozycję na liście z podpowiedziami, zapytanie, dane które trafią do naszego input&#8217;a, jako rezultat zapytania</li>
<li><em>highlight</em> &#8211; false/function &#8211; podświetla szukaną przez nas frazę, w zwracanym ciągu, domyślnie powoduje pogrubienie danej frazy, możemy nadać jej wartość, albo zdefiniować w tym miejscu zupełnie nową funkcję</li>
<li><em>max</em> &#8211; <u>10</u> &#8211;  określa max liczbę pasujących elementów jaka zostanie pobrana / wyświetlona jako podpowiedź, wartość określona przez ten parametr wysyłana jest do zewnętrznego źródła, jako <em>limit</em>, np.: <em>miasta.php?limit=10</em></li>
<li><em>minChars</em> &#8211; <u>1</u> &#8211; oznaczą, ile znaków należy wpisać, aby aktywować nasze podpowiedzi</li>
<li><em>multiple</em> &#8211; true/<u>false</u> &#8211; pozwala na wprowadzenie do danego pola, więcej niż jednej wartości</li>
<li><em>multipleSeparator</em> &#8211; <u>przecinek , </u> &#8211;  znak, który zostanie wstawiony między wiele wartości (jeśli poprzednia opcja jest aktywna)</li>
<li><em>mustMatch</em> &#8211; true/<u>false</u> &#8211; możemy nakazać aby fraza wpisywana do naszego inputa była zgodna z jedną z podpowiadanych wartości</li>
<li><em>scroll</em> &#8211; <u>true</u>/false &#8211;  włącza pasek przewijania kiedy wyników jest więcej, tak że nie mieszczą się w szerokości zdefiniowanej w <em>scrollHeight</em></li>
<li><em>scrollHeight</em> &#8211; <u>180</u> &#8211; wysokość listy z podpowiedziami</li>
<li><em>selectFirst</em> &#8211; <u>true</u>/false &#8211; ustawia automatycznie podświetlenie na pierwszym z sugerowanych elementów, zanim jeszcze zdążymy wykonać jakąś reakcję klawiaturą lub myszką</li>
<li><em>width</em> &#8211; <u>auto</u> &#8211; szerokość listy z podpowiedziami, domyślnie lista przyjmuje szerokość elementu do którego jest przypisana</li>
</ol>
<p>A teraz prześledźmy niektóre z powyższych opcji na przykładach:</p>
<div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-autocomplete2.php" frameborder="0" style="height:540px;width:610px;">Please upgrade your browser</iframe>
</div><br />
<div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-autocomplete3.php" frameborder="0" style="height:540px;width:610px;">Please upgrade your browser</iframe>
</div>
<p>Aby zademonstrować użycie opcji <em>formatItem, formatMatch, formatResult</em> najłatwiej będzie posłużyć się źródłem zewnętrznym. Przekazujemy wówczas do funkcji adres www, spod którego będziemy pobierać dane na potrzeby naszych podpowiedzi, np.:</p>
<pre class="brush: jscript; title: ;">$(uchwyt).autocomplete('miasta.php', [options] );</pre>
<p>Na potrzeby tego przykładu utworzymy sobie prostą bazę SQLite, z miastami (oczywiście w tym miejscu możemy skorzystać z dowolnego silnika bazy danych):</p>
<pre class="brush: php; title: ;">
// php

$db = new SQLiteDatabase('baza.sqlite');

$db-&gt;query(&quot;
CREATE TABLE miasta (
miasto_id INTEGER PRIMARY KEY,
miasto_nazwa VARCHAR(50),
miasto_wojewodztwo VARCHAR(50)
);

INSERT INTO miasta VALUES (NULL, 'Wadowice','woj. małopolskie');
INSERT INTO miasta VALUES (NULL, 'Wałbrzych','woj. dolnośląskie');
INSERT INTO miasta VALUES (NULL, 'Wałcz','woj. zachodniopomorskie');
INSERT INTO miasta VALUES (NULL, 'Warka','woj. mazowieckie');
INSERT INTO miasta VALUES (NULL, 'Warszawa','woj. mazowieckie');
INSERT INTO miasta VALUES (NULL, 'Warta','woj. łódzkie');
INSERT INTO miasta VALUES (NULL, 'Wasilków','woj. podlaskie');
&quot;);
</pre>
<p>Następnie utworzymy prosty skrypt <em>miasta.php</em>, który będzie pobierał nam odpowiedni fragment tej bazy:</p>
<pre class="brush: php; title: ;">
// php

@$q = $_GET['q'];

$db = new SQLiteDatabase('baza.sqlite');
$result = $db-&gt;query(&quot;SELECT * FROM miasta WHERE miasto_nazwa LIKE '%$q%';&quot;);
while ($result-&gt;valid()) {
    $row = $result-&gt;current();
    echo $row['miasto_id'].&quot;|&quot;.$row['miasto_nazwa'].&quot;|&quot;.$row['miasto_wojewodztwo'].&quot;\n&quot;;
    $result-&gt;next();
}
</pre>
<p>Skrypt ten zwróci nam dane w postaci:</p>
<pre class="brush: plain; title: ;">
1|Wadowice|woj. małopolskie
2|Wałbrzych|woj. dolnośląskie
3|Wałcz|woj. zachodniopomorskie
4|Warka|woj. mazowieckie
5|Warszawa|woj. mazowieckie
6|Warta|woj. łódzkie
7|Wasilków|woj. podlaskie
</pre>
<div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-autocomplete4.php" frameborder="0" style="height:735px;width:610px;">Please upgrade your browser</iframe>
</div>
<p>I jeszcze kilka przykładów na koniec:</p>
<div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-autocomplete5.php" frameborder="0" style="height:1620px;width:610px;">Please upgrade your browser</iframe>
</div>
<p>W opisie celowo pominąłem opis parametrów <em>matchCase, matchContains</em> oraz <em>matchSubset</em>, używa się ich w połączeniu z cachowaniem zapytań do zewnętrznych źródeł, jednak do tej pory nie znalazłem dla nich żadnego ciekawego zastosowania.</p>
<p class="important"><b>Uwaga!</b> Ważna informacja dotycząca parametru <em>minChars</em>.</p>
<p>Aż do wersji 1.1 skryptu (w chwili pisania tej notki, wersja aktualna) występuje problem z parametrem <em>minChars</em>, aby działał prawidłowo należy znaleźć w skrypcie fragment:</p>
<pre class="brush: jscript; title: ;">for (var i = q.length - 1; i &gt;= options.minChars; i--) {</pre>
<p>i zamienić go na:</p>
<pre class="brush: jscript; title: ;">for (var i = q.length - 1; i &gt;= 1; i--) {</pre>
<p>Po kolejne przykłady odsyłam wszystkich zainteresowanych: <a href="http://jquery.bassistance.de/autocomplete/demo/"> &#8211; tutaj &#8211; </a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/12/24/jquery-autocomplete-magiczne-podpowiedzi/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>jQuery.Tooltip &#8211; magiczne chmurki</title>
		<link>http://dev.baczyk.net/2009/07/25/jquery-tooltip-magiczne-chmurki/</link>
		<comments>http://dev.baczyk.net/2009/07/25/jquery-tooltip-magiczne-chmurki/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 14:00:51 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery Tooltip]]></category>

		<guid isPermaLink="false">http://dev.baczyk.net/?p=216</guid>
		<description><![CDATA[Dzisiejszą notką pragnę rozpocząć drugą serię wpisów, które dotyczyć będą użycia znakomitej (nie tylko moim zdaniem) JavaScript&#8217;owej biblioteki jQuery. Drogi Czytelniku, nie znajdziesz tutaj podstawowego kursu, z którego nauczysz się jak posługiwać się tą biblioteką. Postaram się jednak w tej serii przedstawić ciekawe rozwiązania i wtyczki (pluginy), które to pomogą Ci w zbudowaniu ciekawego interfejsu, [...]]]></description>
			<content:encoded><![CDATA[<p>Dzisiejszą notką pragnę rozpocząć drugą serię wpisów, które dotyczyć będą użycia znakomitej (nie tylko moim zdaniem) JavaScript&#8217;owej biblioteki jQuery. Drogi Czytelniku, nie znajdziesz tutaj podstawowego kursu, z którego nauczysz się jak posługiwać się tą biblioteką. Postaram się jednak w tej serii przedstawić ciekawe rozwiązania i wtyczki (pluginy), które to pomogą Ci w zbudowaniu ciekawego interfejsu, bądź urozmaicą tworzone przez Ciebie serwisy WWW.</p>
<p><span id="more-216"></span></p>
<p>Do dzieła. Na początek bardzo ciekawa wtyczką autorstwa Jörna Zaefferer&#8217;a o nazwie jQuery.Tooltip.</p>
<p>Pewnie nie raz zastanawiałeś się jak stworzyć podpowiedzi prezentowane w chmurkach, które pojawią się po najechaniu na dany element (obrazek, przycisk) kursorem myszy. Ten bardzo użyteczny efekt można dość szybko i łatwo uzyskać właśnie z użyciem wspomnianej wtyczki.</p>
<p>Potrzebne nam będą:</p>
<ul>
<li> biblioteka jQuery – do pobrania ze strony <a href="http://jquery.com/">http://jquery.com/</a></li>
<li> wtyczka jQuery.Tooltip – do pobrania ze strony autora <a href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/">http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/</a></li>
<li> odrobina czasu i dobrych chęci <img src='http://dev.baczyk.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
</ul>
<p>Na początek przyjrzyjmy się jak wygląda standardowe wywołanie funkcji.</p>
<div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-tooltip1.php" frameborder="0" style="height:460px;width:610px;">Please upgrade your browser</iframe>
</div>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="pl-PL">W ten sposób określiliśmy aby wszystkie elementy na stronie posiadające klasę <em>help</em> były obsługiwane przez nasz plugin. Tekst, który ma się pojawiać w naszym wyskakującym okienku powinniśmy umieścić w tagu <em>title</em>.</p>
<p style="margin-bottom: 0cm;" lang="pl-PL">Przyjrzyjmy się teraz jakie opcje oferuje nam jeszcze jQuery.Tooltip</p>
<p style="margin-bottom: 0cm;" lang="pl-PL">Funkcję <em>.tooltip()</em> możemy wywołać z następującymi parametrami:</p>
<ol>
<li><em>delay </em>– określamy z jakim opóźnieniem ma pojawić się nasz tooltip, czas podajemy w milisekundach, np. 2 sekundy (2000 milisekund);</li>
<li><em>track </em>– kiedy ustawimy ten parametr na <em>true</em>, nasz tooltip będzie podążał za kursorem myszy;</li>
<li> <em>showURL </em>– domyślnym ustawieniem naszego pluginu jest, aby pokazywał zawartość atrybutu src jako fragment zawartości naszego tooltip&#8217;a, korzystając z tego parametru możemy wyłączyć tę właściwość</li>
<li> <em>showBody </em>– ten parametr pozwala nam zdefiniować symbol, który będzie separował nagłówek naszego tooltipa od treści, nagłówek opatrzony jest tagiem <em>&lt;h3&gt;</em>, możemy nałożyć na niego dowolny styl, itp.</li>
<li> <em>bodyHandler </em>– dzięki tej opcji możemy sami zdefiniować ciało naszego tooltipa</li>
<li> <em>extraClass </em>– pozwala ustalić dodatkową klasę dla naszego tooltipa, ułatwiając tym samym stylizację naszej chmurki</li>
<li> <em>top, left</em> – dzięki tym parametrom określimy w jakiej odległości od kursora będzie pojawiał się nasz tooltip</li>
<li> <em>id </em>– możemy zmienić domyślną wartość atrybutu id tooltipa na dowolny inny</li>
<li> <em>fixPNG </em>– ostatnia z omawianych opcji, naprawia wyświetlanie półprzezroczystości dla przeglądarek rodziny IE</li>
</ol>
<p style="margin-bottom: 0cm;" lang="pl-PL">Prześledźmy wszystko na przykładach, aby wywołać chmurkę najeżdżamy kursorem na znak zapytania:</p>
<p style="margin-bottom: 0cm;" lang="pl-PL"><div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-tooltip2.php" frameborder="0" style="height:1275px;width:610px;">Please upgrade your browser</iframe>
</div>
<p style="margin-bottom: 0cm;" lang="pl-PL">Wtyczki jQuery.Tooltip możemy użyć praktycznie z każdym elementem html. Osobiście najczęściej stosuję ją do takiego celu jak ten zaprezentowany powyżej, kiedy w atrakcyjny i przystępny sposób chcę zaprezentować odbiorcy jakąś istotną informację.</p>
<p style="margin-bottom: 0cm;" lang="pl-PL">Poniżej kilka przykładów demonstrujących użycie wtyczki z innymi elementami języka HTML:</p>
<p style="margin-bottom: 0cm;" lang="pl-PL"><div class="iframe-wrapper">
  <iframe src="http://dev.baczyk.net/snippet/js/jquery-tooltip3.php" frameborder="0" style="height:525px;width:610px;">Please upgrade your browser</iframe>
</div>
<p style="margin-bottom: 0cm;" lang="pl-PL">I to na tyle tym razem, po więcej przykładów odsyłam na stronę: <a href="http://jquery.bassistance.de/tooltip/demo/">http://jquery.bassistance.de/tooltip/demo/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/07/25/jquery-tooltip-magiczne-chmurki/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Jak sprawdzić czy dany rok jest rokiem przestępnym?</title>
		<link>http://dev.baczyk.net/2009/07/06/jak-sprawdzic-czy-dany-rok-jest-rokiem-przestepnym/</link>
		<comments>http://dev.baczyk.net/2009/07/06/jak-sprawdzic-czy-dany-rok-jest-rokiem-przestepnym/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 15:50:33 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.baczyk.net/?p=162</guid>
		<description><![CDATA[Jednym z najprostszych rozwiązań z jakimi się zetknąłem było sprawdzenie ostatniego dnia lutego. Powyższy problem rozwiązujemy korzystając z tak zbudowanego zapytania: SELECT DAY( LAST_DAY( DATE_ADD( DATE_ADD( DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ), INTERVAL 1 DAY ), INTERVAL 1 MONTH ) ) ) AS wynik; Ale od początku, rozbierzmy to zapytanie na części [...]]]></description>
			<content:encoded><![CDATA[<p>Jednym z najprostszych rozwiązań z jakimi się zetknąłem było sprawdzenie ostatniego dnia lutego.</p>
<p>Powyższy problem rozwiązujemy korzystając z tak zbudowanego zapytania:</p>
<pre class="brush: sql; title: ;">SELECT
  DAY( LAST_DAY( DATE_ADD( DATE_ADD( DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ), INTERVAL 1 DAY ), INTERVAL 1 MONTH ) ) ) AS wynik;
</pre>
<p>Ale od początku, rozbierzmy to zapytanie na części pierwsze <img src='http://dev.baczyk.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-162"></span></p>
<p>Na początek powinniśmy określić ostatni dzień zeszłego roku ..</p>
<pre class="brush: sql; title: ;">mysql&gt; SELECT
    -&gt;   DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ) AS wynik;
+------------+
| wynik      |
+------------+
| 2008-12-31 |
+------------+
1 row in set (0.00 sec)
</pre>
<p>.. dodajmy 1 dzień i w ten sposób znajdujemy pierwszy dzień bieżącego roku ..</p>
<pre class="brush: sql; title: ;">mysql&gt; SELECT
    -&gt;   DATE_ADD( DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ), INTERVAL 1 DAY ) AS wynik;
+------------+
| wynik      |
+------------+
| 2009-01-01 |
+------------+
1 row in set (0.00 sec)
</pre>
<p>.. analogicznie do poprzedniego zapytania, dodajemy 1 miesiąc (docierając w ten sposób do lutego b.r.) ..</p>
<pre class="brush: sql; title: ;">mysql&gt; SELECT
    -&gt;   DATE_ADD( DATE_ADD( DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ), INTERVAL 1 DAY ), INTERVAL 1 MONTH ) AS wynik;
+------------+
| wynik      |
+------------+
| 2009-02-01 |
+------------+
1 row in set (0.00 sec)
</pre>
<p>.. sprawdzamy jaki dzień był ostatnim dniem lutego ..</p>
<pre class="brush: sql; title: ;">mysql&gt; SELECT
    -&gt;   LAST_DAY( DATE_ADD( DATE_ADD( DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ), INTERVAL 1 DAY ), INTERVAL 1 MONTH ) ) AS wynik;
+------------+
| wynik      |
+------------+
| 2009-02-28 |
+------------+
1 row in set (0.00 sec)
</pre>
<p>.. ponieważ potrzebny nam jest tylko dzień, ostatni raz modyfikujemy nasze zapytanie:</p>
<pre class="brush: sql; title: ;">mysql&gt; SELECT
    -&gt;   DAY( LAST_DAY( DATE_ADD( DATE_ADD( DATE_ADD( CURRENT_DATE, INTERVAL - DAYOFYEAR( CURRENT_DATE ) DAY ), INTERVAL 1 DAY ), INTERVAL 1 MONTH ) ) ) AS wynik;
+-------+
| wynik |
+-------+
|    28 |
+-------+
1 row in set (0.00 sec)
</pre>
<p>Dalsze postępowanie jest już oczywiste, jeśli wynikiem działania naszego zapytania jest &#8222;28&#8243; rok nie jest rokiem przestępnym, jeśli &#8222;29&#8243; to rok jest rokiem przestępnym.</p>
<p>Nic nie stoi na przeszkodzie, by powyższą klauzulę wzbogacić o wyrażenie warunkowe <em>CASE</em> tak by zwracała konkretną odpowiedź na postawione przez nas pytanie. Jednak użycie wyrażenia <em>CASE</em> będzie tematem osobnego wpisu.</p>
<p class="important">Zachęcam do bliższego zapoznania się z funkcjami: <em>DATE_ADD()</em>, <em>LAST_DAY()</em> oraz <em>DAY()</em> a także <em>CURRENT_TIME</em>. Opis wszystkich funkcji wraz z przykładami użycia znajduje się pod <a class="html" href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html">tym</a> adresem www.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/07/06/jak-sprawdzic-czy-dany-rok-jest-rokiem-przestepnym/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pobieranie jedynie wybranych kolumn z zadanej tabeli</title>
		<link>http://dev.baczyk.net/2009/07/04/pobieranie-jedynie-wybranych-kolumn-z-zadanej-tabeli/</link>
		<comments>http://dev.baczyk.net/2009/07/04/pobieranie-jedynie-wybranych-kolumn-z-zadanej-tabeli/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 11:06:11 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.baczyk.net/?p=138</guid>
		<description><![CDATA[Pierwszy tematyczny wpis na rozgrzewkę Struktura DB wraz z przykładowymi danymi dla omawianych zagadnień znajduje się tutaj. Właściwie każdy kto rozpoczyna swoją przygodę z bazami danych w pierwszej kolejności uczy się jak wybierać dane z bazy. Ogólna i najprostsza postać klauzuli SELECT (służy do pobierania danych) ma postać: SELECT * FROM &#60;tabela&#62;; Sprawdźmy: mysql&#62; select [...]]]></description>
			<content:encoded><![CDATA[<p>Pierwszy tematyczny wpis na rozgrzewkę <img src='http://dev.baczyk.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p class="important">Struktura DB wraz z przykładowymi danymi dla omawianych zagadnień znajduje się <a class="html" href="http://dev.baczyk.net/2009/07/04/szkic-db-na-potrzeby-cwiczen/">tutaj</a>.</p>
<p>Właściwie każdy kto rozpoczyna swoją przygodę z bazami danych w pierwszej kolejności uczy się jak wybierać dane z bazy.</p>
<p>Ogólna i najprostsza postać klauzuli <em>SELECT</em> (służy do pobierania danych) ma postać:<em></em></p>
<pre class="brush: sql; title: ;"> SELECT * FROM &lt;tabela&gt;;</pre>
<p>Sprawdźmy:</p>
<pre class="brush: sql; title: ;">mysql&gt; select * from prac;
+----+------------+------------+------------+---------+--------+-----------+
| id | nazwisko   | stanowisko | data_zatr  | wyplata | premia | id_dzialu |
+----+------------+------------+------------+---------+--------+-----------+
|  1 | Kowalski   | sprzedawca | 2005-07-13 |    1600 |    300 |        30 |
|  2 | Malinowski | menadżer   | 2005-09-13 |    2489 |      0 |        30 |
|  3 | Grabski    | analityk   | 2006-07-15 |    1458 |      0 |        20 |
|  4 | Bielecki   | księgowy   | 2006-03-12 |    1236 |      0 |        10 |
|  5 | Kurtyka    | dyrektor   | 2006-04-17 |   11369 |      0 |        10 |
|  6 | Dąbkowski  | księgowy   | 2002-04-13 |    1236 |      0 |        10 |
|  7 | Kononowicz | analityk   | 2006-04-11 |    3548 |      0 |        20 |
|  8 | Janczak    | księgowy   | 2002-01-10 |    3699 |      0 |        10 |
|  9 | Kamiński   | sprzedawca | 2007-09-07 |    1365 |    658 |        30 |
| 10 | Czechowski | analityk   | 2009-01-03 |    3547 |      0 |        20 |
| 11 | Duchnowski | sprzedawca | 2007-09-03 |    1687 |    356 |        30 |
| 12 | Różański   | sprzedawca | 2007-09-07 |    1999 |    200 |        30 |
+----+------------+------------+------------+---------+--------+-----------+
12 rows in set (0.00 sec)
</pre>
<p>W sytuacji, w której chcemy zapoznać się z zawartością tylko wybranych kolumn modyfikujemy naszą klauzulę <em>SELECT</em> i w miejsce znaku * wymieniamy (oddzielając przecinkiem) nasze kolumny:</p>
<pre class="brush: sql; title: ;">mysql&gt; select nazwisko,wyplata,premia from prac;
+------------+---------+--------+
| nazwisko   | wyplata | premia |
+------------+---------+--------+
| Kowalski   |    1600 |    300 |
| Malinowski |    2489 |      0 |
| Grabski    |    1458 |      0 |
| Bielecki   |    1236 |      0 |
| Kurtyka    |   11369 |      0 |
| Dąbkowski  |    1236 |      0 |
| Kononowicz |    3548 |      0 |
| Janczak    |    3699 |      0 |
| Kamiński   |    1365 |    658 |
| Czechowski |    3547 |      0 |
| Duchnowski |    1687 |    356 |
| Różański   |    1999 |    200 |
+------------+---------+--------+
12 rows in set (0.00 sec)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/07/04/pobieranie-jedynie-wybranych-kolumn-z-zadanej-tabeli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Szkic DB na potrzeby ćwiczeń</title>
		<link>http://dev.baczyk.net/2009/07/04/szkic-db-na-potrzeby-cwiczen/</link>
		<comments>http://dev.baczyk.net/2009/07/04/szkic-db-na-potrzeby-cwiczen/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 10:10:38 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.baczyk.net/?p=129</guid>
		<description><![CDATA[Na potrzeby naszych rozważań potrzebnych będzie nam klika tabel&#8230; 1) pracownicy -&#62; prac CREATE TABLE IF NOT EXISTS `prac` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nazwisko` varchar(50) COLLATE utf8_polish_ci NOT NULL, `stanowisko` varchar(50) COLLATE utf8_polish_ci NOT NULL, `data_zatr` date NOT NULL, `wyplata` float NOT NULL, `premia` float DEFAULT NULL, `id_dzialu` int(11) NOT NULL, PRIMARY KEY [...]]]></description>
			<content:encoded><![CDATA[<p>Na potrzeby naszych rozważań potrzebnych będzie nam klika tabel&#8230;</p>
<p>1) pracownicy -&gt; <strong>prac</strong></p>
<pre class="brush: sql; title: ;">CREATE TABLE IF NOT EXISTS `prac` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nazwisko` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  `stanowisko` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  `data_zatr` date NOT NULL,
  `wyplata` float NOT NULL,
  `premia` float DEFAULT NULL,
  `id_dzialu` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=13 ;
</pre>
<pre class="brush: sql; title: ;">INSERT INTO `prac` (`id`, `nazwisko`, `stanowisko`, `data_zatr`, `wyplata`, `premia`, `id_dzialu`) VALUES
(1, 'Kowalski', 'sprzedawca', '2005-07-13', 1600, 300, 30),
(2, 'Malinowski', 'menadżer', '2005-09-13', 2489, NULL, 30),
(3, 'Grabski', 'analityk', '2006-07-15', 1458, NULL, 20),
(4, 'Bielecki', 'księgowy', '2006-03-12', 1236, NULL, 10),
(5, 'Kurtyka', 'dyrektor', '2006-04-17', 11369, NULL, 10),
(6, 'Dąbkowski', 'księgowy', '2002-04-13', 1236, NULL, 10),
(7, 'Kononowicz', 'analityk', '2006-04-11', 3548, NULL0, 20),
(8, 'Janczak', 'księgowy', '2002-01-10', 3699, NULL, 10),
(9, 'Kamiński', 'sprzedawca', '2007-09-07', 1365, 658, 30),
(10, 'Czechowski', 'analityk', '2009-01-03', 3547, NULL, 20),
(11, 'Duchnowski', 'sprzedawca', '2007-09-03', 1687, 356, 30),
(12, 'Różański', 'sprzedawca', '2007-09-07', 1999, 200, 30);
</pre>
<p>2) oddziały firmy -&gt; <strong>dzial</strong></p>
<pre class="brush: sql; title: ;">CREATE TABLE IF NOT EXISTS `dzial` (
  `id` int(11) NOT NULL,
  `nazwa` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  `localizacja` varchar(50) COLLATE utf8_polish_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
</pre>
<pre class="brush: sql; title: ;">INSERT INTO `dzial` (`id`, `nazwa`, `localizacja`) VALUES
(10, 'księgowość', 'Wrocław'),
(20, 'rozwoju', 'Wałbrzych'),
(30, 'sprzedaży', 'Świdnica'),
(40, 'transport', 'Wałbrzych');
</pre>
<p>&#8230; które wypełnimy przykładowymi danymi.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/07/04/szkic-db-na-potrzeby-cwiczen/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hello World!</title>
		<link>http://dev.baczyk.net/2009/07/04/hello-world/</link>
		<comments>http://dev.baczyk.net/2009/07/04/hello-world/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 10:09:59 +0000</pubDate>
		<dc:creator>Sławomir Bączyk</dc:creator>
				<category><![CDATA[Aktualności]]></category>

		<guid isPermaLink="false">http://www.baczyk.net/?p=132</guid>
		<description><![CDATA[Po wielu miesiącach mobilizacji, chyba się udało. Od dnia dzisiejszego powinny zacząć pojawiać się w tym miejscu regularnie notki. Trochę na temat pracy, trochę na temat zainteresowań. Czas pokaże co z tego wyjdzie. W każdym razie serdecznie zapraszam!]]></description>
			<content:encoded><![CDATA[<p>Po wielu miesiącach mobilizacji, chyba się udało.<br />
Od dnia dzisiejszego powinny zacząć pojawiać się w tym miejscu regularnie notki.</p>
<p>Trochę na temat pracy, trochę na temat zainteresowań. Czas pokaże co z tego wyjdzie.</p>
<p>W każdym razie serdecznie zapraszam!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.baczyk.net/2009/07/04/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

