Ah, thanks, that's even better. Much more readable that way, which means less chance for programmer error!<br><br><div><span class="gmail_quote">On 7/30/06, <b class="gmail_sendername">Jess Robinson</b> &lt;<a href="mailto:castaway@desert-island.demon.co.uk">
castaway@desert-island.demon.co.uk</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>See also the new DBIx::Class::Manual::FAQ, which explains another way to
<br>do it.<br><br>Jess<br><br><br>On Fri, 28 Jul 2006, Sarah Berry wrote:<br><br>&gt; That did it! Thanks so much. This new query runs about a jillion times<br>&gt; faster than the old one, which had to execute once for each day in the date
<br>&gt; range.<br>&gt;<br>&gt; On 7/27/06, Jason Galea &lt;<a href="mailto:lists@eightdegrees.com.au">lists@eightdegrees.com.au</a>&gt; wrote:<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;not sure if this will work, but it seems like it should..
<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;I recently got an order_by working like this..<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;order_by =&gt; ['&quot;sum( quantity )&quot; DESC'],<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;so maybe..<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;group_by =&gt; [
<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; '&quot;DAYOFMONTH(DATE_ADD(date, INTERVAL -12 HOUR))&quot;',<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; 'sensorid',<br>&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; '&quot;DATE_FORMAT(DATE_ADD(date, INTERVAL -12 HOUR),'%b')&quot;'<br>&gt;&gt; ]<br>&gt;&gt;<br>&gt;&gt;
<br>&gt;&gt;&nbsp;&nbsp;cheers,<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;J<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;Sarah Berry wrote:<br>&gt;&gt; &gt;&nbsp;&nbsp;I have a query where I need to group by several fields. I set it up in<br>&gt;&gt; &gt;&nbsp;&nbsp;SQL first to make sure that it would work on my db, and now I'm trying
<br>&gt;&gt; &gt;&nbsp;&nbsp;to put it into the proper DBIx format. The problem is that DBIx<br>&gt;&gt; &gt;&nbsp;&nbsp;doesn't seem to like me using column aliases in my group_by clause.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;I found a message in the archives from this month (July 7, &quot;help on
<br>&gt;&gt; &gt;&nbsp;&nbsp;group_by and select as?&quot;) that verified that I can't use aliases in<br>&gt;&gt; &gt;&nbsp;&nbsp;group_by. How can I rephrase my query in a way that is tasteful to<br>&gt;&gt; &gt;&nbsp;&nbsp;DBIx? Should I just grit my teeth and use the straight SQL that
<br>&gt;&gt; &gt;&nbsp;&nbsp;already works?<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;The SQL query:<br>&gt;&gt; &gt;&nbsp;&nbsp;SELECT<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATE_ADD(date, INTERVAL -12 HOUR) AS newdate,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAYOFMONTH(DATE_ADD(date, INTERVAL -12 HOUR)) AS dayofmonth,
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATE_FORMAT(DATE_ADD(date, INTERVAL -12 HOUR),'%b') AS month,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count(*)<br>&gt;&gt; &gt;&nbsp;&nbsp;FROM tblsensorlog<br>&gt;&gt; &gt;&nbsp;&nbsp;WHERE userid = 3003<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND sensorid &gt; 14 AND sensorid &lt; 19
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND date &gt; '2006-06-01 11:59:59' AND date &lt; '2006-07-01 12:00:00'<br>&gt;&gt; &gt;&nbsp;&nbsp;GROUP BY sensorid, month, dayofmonth<br>&gt;&gt; &gt;&nbsp;&nbsp;ORDER BY newdate, sensorid;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;The prose version: Find out how many times each sensor fired each
<br>&gt;&gt; &gt;&nbsp;&nbsp;night, where &quot;night&quot; is defined as anything between noon of one day<br>&gt;&gt; &gt;&nbsp;&nbsp;and noon of the next day, over several nights, for one user.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;The DBIx attempt:
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $range = {<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userid =&gt; &quot;$userid&quot; ,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date&nbsp;&nbsp;&nbsp;&nbsp;=&gt; {&nbsp;&nbsp;&nbsp;&nbsp;'&gt;' =&gt; &quot;$tempdate-&gt;{'sql'}
<br>&gt;&gt;&nbsp;&nbsp;11:59:59&quot;,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;' =&gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;($tempdate2+1)-&gt;{'sql'}.&quot; 12:00:00&quot; },<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sensorid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; { '&gt;' =&gt; '14', '&lt;' =&gt; '19' },
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $fields = {<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;&nbsp;=&gt; [&nbsp;&nbsp;&nbsp;&nbsp;&quot;DATE_ADD(date, INTERVAL -12<br>&gt;&gt;&nbsp;&nbsp;HOUR)&quot;,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;DATE_FORMAT(DATE_ADD(date,
<br>&gt;&gt; &gt;&nbsp;&nbsp;INTERVAL -12 HOUR),'%b')&quot;,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;DAYOFMONTH(DATE_ADD(date,<br>&gt;&gt; &gt;&nbsp;&nbsp;INTERVAL -12 HOUR))&quot;,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'sensorid',
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ count =&gt; '*' }<br>&gt;&gt; &gt; ] ,<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; [ 'newdate', 'month', 'daymonth',<br>&gt;&gt; &gt;&nbsp;&nbsp;'sensorid', 'qcount' ],
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group_by&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; [ 'daymonth', 'sensorid',<br>&gt;&gt; &gt;&nbsp;&nbsp;'month', 'daymonth' ],<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order_by&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; [ 'newdate', 'sensorid' ]
<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&gt;&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $rs =<br>&gt;&gt; &gt;&nbsp;&nbsp;$schema-&gt;resultset('Tblsensorlog')-&gt;search($range,$fields);<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;The error message:<br>
&gt;&gt; &gt;&nbsp;&nbsp;DBD::mysql::st execute failed: Unknown column 'newdate' in 'order<br>&gt;&gt; &gt;&nbsp;&nbsp;clause' at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Storage/DBI.pm<br>&gt;&gt; &gt;&nbsp;&nbsp;line 525.<br>&gt;&gt; &gt;&nbsp;&nbsp;DBD::mysql::st execute failed: Unknown column 'daymonth' in 'field
<br>&gt;&gt; &gt;&nbsp;&nbsp;list' at /usr/lib/perl5/vendor_perl/5.8.8/DBIx/Class/Storage/DBI.pm<br>&gt;&gt; &gt;&nbsp;&nbsp;line 525.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;Thanks for your help.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&nbsp;&nbsp;- Sarah<br>&gt;&gt; &gt;
<br>&gt;&gt; &gt; _______________________________________________<br>&gt;&gt; &gt;&nbsp;&nbsp;List: <a href="http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class">http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
</a><br>&gt;&gt; &gt;&nbsp;&nbsp;Wiki: <a href="http://dbix-class.shadowcatsystems.co.uk/">http://dbix-class.shadowcatsystems.co.uk/</a><br>&gt;&gt; &gt;&nbsp;&nbsp;IRC: irc.perl.org#dbix-class<br>&gt;&gt; &gt;&nbsp;&nbsp;SVN: <a href="http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/">
http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/</a><br>&gt;&gt; &gt;&nbsp;&nbsp;Searchable Archive:<br>&gt;&gt;&nbsp;&nbsp;<a href="http://www.mail-archive.com/dbix-class@lists.rawmode.org/">http://www.mail-archive.com/dbix-class@lists.rawmode.org/
</a><br>&gt;&gt; &gt;<br>&gt;&gt;<br>&gt;&gt;&nbsp;&nbsp;_______________________________________________<br>&gt;&gt;&nbsp;&nbsp;List: <a href="http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class">http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
</a><br>&gt;&gt;&nbsp;&nbsp;Wiki: <a href="http://dbix-class.shadowcatsystems.co.uk/">http://dbix-class.shadowcatsystems.co.uk/</a><br>&gt;&gt;&nbsp;&nbsp;IRC: irc.perl.org#dbix-class<br>&gt;&gt;&nbsp;&nbsp;SVN: <a href="http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/">
http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/</a><br>&gt;&gt;&nbsp;&nbsp;Searchable Archive:<br>&gt;&gt;&nbsp;&nbsp;<a href="http://www.mail-archive.com/dbix-class@lists.rawmode.org/">http://www.mail-archive.com/dbix-class@lists.rawmode.org/
</a><br>&gt;&gt;<br>&gt;<br>&gt;<br><br>_______________________________________________<br>List: <a href="http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class">http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
</a><br>Wiki: <a href="http://dbix-class.shadowcatsystems.co.uk/">http://dbix-class.shadowcatsystems.co.uk/</a><br>IRC: irc.perl.org#dbix-class<br>SVN: <a href="http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/">http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
</a><br>Searchable Archive: <a href="http://www.mail-archive.com/dbix-class@lists.rawmode.org/">http://www.mail-archive.com/dbix-class@lists.rawmode.org/</a><br></blockquote></div><br>