<?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>Floorplanner Tech Blog &#187; mysql</title>
	<atom:link href="http://techblog.floorplanner.com/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.floorplanner.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 19 Nov 2009 04:00:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Request-log-analyzer 1.5.0</title>
		<link>http://techblog.floorplanner.com/2009/11/18/request-log-analyzer-1-5-0/</link>
		<comments>http://techblog.floorplanner.com/2009/11/18/request-log-analyzer-1-5-0/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 17:51:42 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[request-log-analyzer]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[slow query log]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=801</guid>
		<description><![CDATA[Bart and I just released request-log-analyzer version 1.5.0. New features include:

MySQL slow query log format support to analyze what queries are slowing down your database.
Format autodetection: with all those supported file formats, remembering the right --format parameter gets tricky. With format autodetection, this usually is not needed anymore!

As always, run the following command to install [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F11%2F18%2Frequest-log-analyzer-1-5-0%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2009%2F11%2F18%2Frequest-log-analyzer-1-5-0%2F" height="61" width="51" /></a></div><p>Bart and I just released <a href="http://github.com/wvanbergen/request-log-analyzer">request-log-analyzer</a> version 1.5.0. New features include:</p>
<ul>
<li><a href="http://wiki.github.com/wvanbergen/request-log-analyzer/mysql-slow-query-log">MySQL slow query log</a> format support to analyze what queries are slowing down your database.</li>
<li><strong>Format autodetection:</strong> with all those supported file formats, remembering the right <code style="white-space: nowrap">--format</code> parameter gets tricky. With format autodetection, this usually is not needed anymore!</li>
</ul>
<p>As always, run the following command to install or upgrade to the latest version:</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family: Monaco,monospace;">$ gem install request-log-analyzer</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2009/11/18/request-log-analyzer-1-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to remove hidden tab characters</title>
		<link>http://techblog.floorplanner.com/2008/12/17/how-to-remove-hidden-tab-characters/</link>
		<comments>http://techblog.floorplanner.com/2008/12/17/how-to-remove-hidden-tab-characters/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 13:31:37 +0000</pubDate>
		<dc:creator>Gert-Jan</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tab character]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=367</guid>
		<description><![CDATA[At this moment, all the language translations of the Floorplanner 2D app are stored in a database table. Today we discovered that a couple of these translations didn&#8217;t align properly in the interface. After some investigation we discovered that they all contained a hidden tab character at the end of  each string. This was probably [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F12%2F17%2Fhow-to-remove-hidden-tab-characters%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F12%2F17%2Fhow-to-remove-hidden-tab-characters%2F" height="61" width="51" /></a></div><p>At this moment, all the language translations of the Floorplanner 2D app are stored in a database table. Today we discovered that a couple of these translations didn&#8217;t align properly in the interface. After some investigation we discovered that they all contained a hidden tab character at the end of  each string. This was probably caused by importing a malformed CSV file.</p>
<p>I thought a simple <strong>REPLACE</strong> query would fix this problem, but (as usual) it was a little more complicated than that. First I had to find the fields with the tab character&#8230; <a href="http://twitter.com/wvanbergen/status/1060635881" target="_blank">Willem</a> pointed me to the right direction with his favorite weapon of choice <strong>REGEXP</strong>. According to the <a href="http://dev.mysql.com/doc/refman/5.1/en/regexp.html" target="_blank">MySQL docs</a> I could find tab characters with something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family: Monaco,monospace;">SELECT <span style="color: #339933;">*</span> FROM table WHERE field REGEXP <span style="color: #0000ff;">'[[.LF.]]'</span></pre></div></div>

<p>The next step was to remove the tab characters. My first thought was to do this by replacing them with an empty string. It turns out you can&#8217;t combine a <strong>REPLACE</strong> with a <strong>REGEXP</strong> in a query. So I used good ol&#8217; PHP for the job. A nice advantage was that I didn&#8217;t have to do any replacing, I could just use the <em>trim()</em> function.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family: Monaco,monospace;"><span style="color: #000088;">$res</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT id, field FROM table WHERE field REGEXP '[[.LF.]]'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$res</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$field</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'field'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE table SET field = '<span style="color: #006699; font-weight: bold;">$field</span>' WHERE id = <span style="color: #006699; font-weight: bold;">$id</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Rather simple, when you know what to do&#8230; Another bug bites the dust!</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/12/17/how-to-remove-hidden-tab-characters/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Easy OLAP queries in ActiveRecord</title>
		<link>http://techblog.floorplanner.com/2008/07/14/easy-olap-queries-in-activerecord/</link>
		<comments>http://techblog.floorplanner.com/2008/07/14/easy-olap-queries-in-activerecord/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 20:42:18 +0000</pubDate>
		<dc:creator>Willem van Bergen</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[active_olap]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[OLAP]]></category>
		<category><![CDATA[statistics]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=96</guid>
		<description><![CDATA[Because I love statistics so much, I decided to add some neat statistics functionality to the Floorplanner administration interface, so we can get better insight in what is going on. Instead of writing complete OLAP SQL queries myself and adding a custom interface for each one of them so our management can use them (yes [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F07%2F14%2Feasy-olap-queries-in-activerecord%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F07%2F14%2Feasy-olap-queries-in-activerecord%2F" height="61" width="51" /></a></div><p>Because I love statistics so much, I decided to add some neat statistics functionality to the Floorplanner administration interface, so we can get better insight in what is going on. Instead of writing complete OLAP SQL queries myself and adding a custom interface for each one of them so our management can use them (yes Jeroen, that means you!), I built an ActiveRecord extension to ease the work. Right now, I only have to define some categories, and it automagically generates the right SQL query to generate charts and tables with the number of records that fall in each category. Moreover, by clicking on these numbers, I can drill down to the individual records.</p>
<p>I can define the categories like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family: Monaco,monospace;">olap_definition = <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:categories</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
  <span style="color:#ff3333; font-weight:bold;">:project_is_private</span>   <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:public</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>, <span style="color:#ff3333; font-weight:bold;">:publishd_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,
  <span style="color:#ff3333; font-weight:bold;">:project_is_public</span>    <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:public</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,  <span style="color:#ff3333; font-weight:bold;">:publishd_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span> <span style="color:#006600; font-weight:bold;">&#125;</span>,
  <span style="color:#ff3333; font-weight:bold;">:project_is_published</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'projects.published_at IS NOT NULL'</span>
<span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Not too hard, was it? Now, I can easily feed this to <code>Project.olap_query</code>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family: Monaco,monospace;"><span style="color:#0066ff; font-weight:bold;">@query_result</span> = Project.<span style="color:#9900CC;">olap_query</span><span style="color:#006600; font-weight:bold;">&#40;</span>olap_definition<span style="color:#006600; font-weight:bold;">&#41;</span> 
<span style="color:#008000; font-style:italic;"># @query_result == {</span>
<span style="color:#008000; font-style:italic;">#   :project_is_private   =&gt; 123,</span>
<span style="color:#008000; font-style:italic;">#   :project_is_public    =&gt; 456,</span>
<span style="color:#008000; font-style:italic;">#   :project_is_published =&gt; 3,</span>
<span style="color:#008000; font-style:italic;">#   :other                =&gt; 2</span>
<span style="color:#008000; font-style:italic;"># }</span></pre></div></div>

<p>Note that the category <em>other</em> is added automatically, but can be omitted if you wish. (I found that the other-category is nice to spot data integrity problems in your dataset you didn&#8217;t think of beforehand). The result can be used to create a table with the results, plot a pie chart with the Google Charts API. Because this setup is completely generic, this functionality only has to be written once. DRY!</p>
<p>The SQL for other-category is &#8220;calculated&#8221; by OR-ing all the categories and checking whether the result is <code>false</code>, or <code>NULL</code>. The check for <code>NULL</code> is necessary if you have <code>NULL</code>-values in your table: this is a weird characteristic of SQL that defines that <code>TRUE AND NULL</code> equals <code>NULL</code> (see <a href="http://en.wikipedia.org/wiki/Null_(SQL)#Three-valued_logic_.283VL.29">Wikipedia</a>).</p>
<p>The actual SQL query for this example would be:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family: Monaco,monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> 
  SUM<span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>public <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">AND</span> projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> project_is_private<span style="color: #66cc66;">,</span>
  SUM<span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>public <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">AND</span> projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> project_is_public<span style="color: #66cc66;">,</span>
  SUM<span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> project_is_published<span style="color: #66cc66;">,</span>
  SUM<span style="color: #66cc66;">&#40;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #66cc66;">&#40;</span>
    <span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>public <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">AND</span> projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OR</span>
    <span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>public <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">AND</span> projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OR</span>
    <span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #66cc66;">&#40;</span>
    <span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>public <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333; font-weight: bold;">AND</span> projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OR</span>
    <span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>public <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">AND</span> projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">OR</span>
    <span style="color: #66cc66;">&#40;</span>projects<span style="color: #66cc66;">.</span>published_at <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> other
<span style="color: #993333; font-weight: bold;">FROM</span> projects</pre></div></div>

<p>Some notes about this query:</p>
<ul>
<li>It is complety built using the fragments from the categories. The fragment for the other-cagegory is a little verbose, but what do I care? It works and is generated automatically! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Note that a record can be in multiple categories, depending on the category definitions. The other category only contains records that conform to none of the provided categories.</li>
<li><code>SUM</code> is used in stead of <code>COUNT</code>. This way, I can query all the categories at once and it solves the problems with <code>NULL</code>-values, while keeping my <code>WHERE</code> and <code>GROUP BY</code> clause nice and clean <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  </li>
<li>The query is built completely using ActiveRecords <code>find</code> method by using <a href="http://railscasts.com/episodes/112">anonymous scopes</a>. Therefore, Rails 2.1 is required, but this makes some neat tricks possible as well.
</ul>
<p>I also have a <code>Project.olap_drilldown</code> method that I can use to find the individual projects in a category:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family: Monaco,monospace;"><span style="color:#0066ff; font-weight:bold;">@projects</span> = Project.<span style="color:#9900CC;">olap_drilldown</span><span style="color:#006600; font-weight:bold;">&#40;</span>olap_definition, <span style="color:#ff3333; font-weight:bold;">:project_is_public</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;"># SELECT projects.* FROM projects </span>
<span style="color:#008000; font-style:italic;"># WHERE (projects.public = 1 AND projects.published_at IS NULL)</span>
&nbsp;
<span style="color:#0066ff; font-weight:bold;">@projects</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>project<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> project.<span style="color:#9900CC;">name</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Because this functionality is built on anonymous scopes, it offers some interesting additional functionality. You can use your own scopes to limit the input dataset</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family: Monaco,monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Project <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:recent</span>, <span style="color:#CC0066; font-weight:bold;">lambda</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> 
              <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'created_at &gt; ?'</span>, <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span> <span style="color:#006600; font-weight:bold;">-</span> 7.<span style="color:#9900CC;">days</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
  ...
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#008000; font-style:italic;"># This will add a WHERE-clause to the OLAP query</span>
results = Project.<span style="color:#9900CC;">recent</span>.<span style="color:#9900CC;">olap_query</span><span style="color:#006600; font-weight:bold;">&#40;</span>olap_definition<span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Or, use :conditions for the same effect</span>
results = Project.<span style="color:#9900CC;">olap_query</span><span style="color:#006600; font-weight:bold;">&#40;</span>olap_definition.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span>
            <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'created_at &gt; ?'</span>, <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span> <span style="color:#006600; font-weight:bold;">-</span> 7.<span style="color:#9900CC;">days</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>As I noted before, the <code>GROUP BY</code>-clause is not used. I already built an extension to use the <code>GROUP BY</code> clause to group the results in periods of a given timestamp field of the model (e.g. <code>created_by</code>). When I pass the result of such a query to the Google Chart API, I can generate trend graphs to see how my dataset is evolving.</p>
<p>If I have time and there is any interest, I may release this extension as a gem or Rails plugin.</p>
<p><strong>UPDATE:</strong> I <a href="http://techblog.floorplanner.com/2008/07/29/active-olap-released/">rewrote it</a> and released this project on <a href="http://github.com/wvanbergen/active_olap/">github</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/07/14/easy-olap-queries-in-activerecord/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Raise by one SQL statement</title>
		<link>http://techblog.floorplanner.com/2007/10/17/raise-by-one-sql-statement/</link>
		<comments>http://techblog.floorplanner.com/2007/10/17/raise-by-one-sql-statement/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 17:29:18 +0000</pubDate>
		<dc:creator>Gert-Jan</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[increment]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.suite75.net/blog/dev/raise-by-one-sql-statement.html</guid>
		<description><![CDATA[Today I discovered that it&#8217;s very easy to raise a value by one (or any other number) when you&#8217;re using a MySQL database. This is all:

UPDATE tablename SET value = value + 1 WHERE ...

]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2007%2F10%2F17%2Fraise-by-one-sql-statement%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2007%2F10%2F17%2Fraise-by-one-sql-statement%2F" height="61" width="51" /></a></div><p>Today I discovered that it&#8217;s very easy to raise a value by one (or any other number) when you&#8217;re using a MySQL database. This is all:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family: Monaco,monospace;"><span style="color: #993333; font-weight: bold;">UPDATE</span> tablename <span style="color: #993333; font-weight: bold;">SET</span> value <span style="color: #66cc66;">=</span> value <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #66cc66;">...</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2007/10/17/raise-by-one-sql-statement/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
