<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: Using sub-queries to avoid multiple DB requests in Rails</title>
	<atom:link href="http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/</link>
	<description>In my blog I'll try to describe about interesting technologies, my discovery in IT and some useful things about programming.</description>
	<pubDate>Mon, 21 Jul 2008 01:26:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Roman Dmytrenko</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47132</link>
		<dc:creator>Roman Dmytrenko</dc:creator>
		<pubDate>Fri, 30 Nov 2001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47132</guid>
		<description>Мог бы просто ответить, что кеширование есть :). К чему какие подробности.</description>
		<content:encoded><![CDATA[<p>Мог бы просто ответить, что кеширование есть :). К чему какие подробности.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmytro Shteflyuk</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47128</link>
		<dc:creator>Dmytro Shteflyuk</dc:creator>
		<pubDate>Fri, 30 Nov 2001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47128</guid>
		<description>2Roman:

[cc lang="rails"]
# Выбираем видео
@video = Video.find :first
# Загружаем категории отдельным запросом
@video.categories
# Здесь категории юзаются уже загруженные
# дополнительного запроса нет
@video.categories
# Здесь форсируем загрузку категорий
# повторый запрос к базе
@video.categories(true)
[/cc]

Ответил?</description>
		<content:encoded><![CDATA[<p>2Roman:</p>
<div class="codecolorer-container rails"><div class="codecolorer" style="font-family: monospace;"><span class="co1"># Выбираем видео</span><br />
<span class="re1">@video</span> = Video.<span class="me1">find</span> <span class="re3">:first</span><br />
<span class="co1"># Загружаем категории отдельным запросом</span><br />
<span class="re1">@video</span>.<span class="me1">categories</span><br />
<span class="co1"># Здесь категории юзаются уже загруженные</span><br />
<span class="co1"># дополнительного запроса нет</span><br />
<span class="re1">@video</span>.<span class="me1">categories</span><br />
<span class="co1"># Здесь форсируем загрузку категорий</span><br />
<span class="co1"># повторый запрос к базе</span><br />
<span class="re1">@video</span>.<span class="me1">categories</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span></div></div>
<p>Ответил?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmytro Shteflyuk</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47124</link>
		<dc:creator>Dmytro Shteflyuk</dc:creator>
		<pubDate>Fri, 30 Nov 2001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47124</guid>
		<description>Ты все переставил местами :-) SQL ассоциируется с ассемблером, как Ruby ассоциируется с PHP. Эдакая пропорция. Может немного преувеличено, но смысл такой.

Я не вижу преимущества у следующего кода (PHP, для простоты, именно то, что я назвал "ассемблером")

[cc lang="php" tab_size="2"]
$rs = $db-&gt;fetch_all('SELECT v.id AS v_id, v.title AS v_title, c.id AS c_id, c.name AS c_name FROM videos v JOIN categories_videos cv ON v.id = cv.video_id JOIN categories c ON c.id = cv.category_id LIMIT 20')
$old_post_id = 0;
$posts = array();
foreach ($rs as $row) {
	if ($old_post_id != $row['v_id']) {
		$post = array('id' =&gt; $row['v_id'], 'title' =&gt; $row['v_title'], 'categories' =&gt; array());
		$posts[] = $post;
		$old_post_id = $post['id'];
	}
	$post['categories'][] = array('id' =&gt; $row['c_id'], 'name' =&gt; $row['c_name']);
}
[/cc]

(код я не проверял, скорее всего не работает) перед кодом на руби с использованием рельсов:

[cc lang="rails"]
Video.find :all, :include =&gt; :categories, :limit =&gt; 20
[/cc]

Да, не надо меня пинать на тему, что под пхп есть куча фреймворком и мой код не имеет смысла. Просто попробуйте руби и вы не сможете остановиться.

ЗЫ. Приведенный код имеет несколько проблем. Во-первых, я выбрал не все поля (у меня в таблице их десяток), во-вторых использовал &lt;tt&gt;LIMIT&lt;/tt&gt; в SQL, что нельзя использовать в других СУБД, потому еще надо долепить условий. Ну и никаких &lt;tt&gt;WHERE&lt;/tt&gt; тоже не приводил, потому что надоело писать.</description>
		<content:encoded><![CDATA[<p>Ты все переставил местами <img src='http://kpumuk.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> SQL ассоциируется с ассемблером, как Ruby ассоциируется с PHP. Эдакая пропорция. Может немного преувеличено, но смысл такой.</p>
<p>Я не вижу преимущества у следующего кода (PHP, для простоты, именно то, что я назвал &#8220;ассемблером&#8221;)</p>
<div class="codecolorer-container php"><div class="codecolorer" style="font-family: monospace;"><span class="re0">$rs</span> = <span class="re0">$db</span>-&gt;<span class="me1">fetch_all</span><span class="br0">&#40;</span><span class="st0">'SELECT v.id AS v_id, v.title AS v_title, c.id AS c_id, c.name AS c_name FROM videos v JOIN categories_videos cv ON v.id = cv.video_id JOIN categories c ON c.id = cv.category_id LIMIT 20'</span><span class="br0">&#41;</span><br />
<span class="re0">$old_post_id</span> = <span class="nu0">0</span>;<br />
<span class="re0">$posts</span> = <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$rs</span> <span class="kw1">as</span> <span class="re0">$row</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$old_post_id</span> != <span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">'v_id'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="re0">$post</span> = <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">'id'</span> =&gt; <span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">'v_id'</span><span class="br0">&#93;</span>, <span class="st0">'title'</span> =&gt; <span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">'v_title'</span><span class="br0">&#93;</span>, <span class="st0">'categories'</span> =&gt; <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="re0">$posts</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="re0">$post</span>;<br />
&nbsp; &nbsp; <span class="re0">$old_post_id</span> = <span class="re0">$post</span><span class="br0">&#91;</span><span class="st0">'id'</span><span class="br0">&#93;</span>;<br />
&nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="re0">$post</span><span class="br0">&#91;</span><span class="st0">'categories'</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">'id'</span> =&gt; <span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">'c_id'</span><span class="br0">&#93;</span>, <span class="st0">'name'</span> =&gt; <span class="re0">$row</span><span class="br0">&#91;</span><span class="st0">'c_name'</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div></div>
<p>(код я не проверял, скорее всего не работает) перед кодом на руби с использованием рельсов:</p>
<div class="codecolorer-container rails" style="height:35px;"><div class="codecolorer" style="font-family: monospace;">Video.<span class="me1">find</span> <span class="re3">:all</span>, <span class="re3">:include</span> =&gt; <span class="re3">:categories</span>, <span class="re3">:limit</span> =&gt; <span class="nu0">20</span></div></div>
<p>Да, не надо меня пинать на тему, что под пхп есть куча фреймворком и мой код не имеет смысла. Просто попробуйте руби и вы не сможете остановиться.</p>
<p>ЗЫ. Приведенный код имеет несколько проблем. Во-первых, я выбрал не все поля (у меня в таблице их десяток), во-вторых использовал <tt>LIMIT</tt> в SQL, что нельзя использовать в других СУБД, потому еще надо долепить условий. Ну и никаких <tt>WHERE</tt> тоже не приводил, потому что надоело писать.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Roman Dmytrenko</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47122</link>
		<dc:creator>Roman Dmytrenko</dc:creator>
		<pubDate>Fri, 30 Nov 2001 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47122</guid>
		<description>Честно говоря, Вы можете не осознавать всю работу ORM фреймворка для того, чтобы работать с ним.  К тому же вопрос о гибких запросов к базе данных должен подыматься только в случае необходимости.  В большинстве случаем мы делаем большую ошибку, начиная думать об оптимизации. 

Только после нескольких предварительных релизов и более менее установлении архитектуры, можно думать об оптимизации SQL запросов. А так получается - еще ничего не сделали, зато уже хотим оптимизировать. 

Кстати, как с кешированием выборок в RoR?</description>
		<content:encoded><![CDATA[<p>Честно говоря, Вы можете не осознавать всю работу ORM фреймворка для того, чтобы работать с ним.  К тому же вопрос о гибких запросов к базе данных должен подыматься только в случае необходимости.  В большинстве случаем мы делаем большую ошибку, начиная думать об оптимизации. </p>
<p>Только после нескольких предварительных релизов и более менее установлении архитектуры, можно думать об оптимизации SQL запросов. А так получается - еще ничего не сделали, зато уже хотим оптимизировать. </p>
<p>Кстати, как с кешированием выборок в RoR?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47118</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Thu, 30 Nov 2000 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47118</guid>
		<description>Обижаться конечно же не стану, не для того вопрос задал.
Обязательно попытаюсь узнать что такое Ruby и с чем эти вкусности едят :).
Ну а по поводу сложности и рутины - не зная как устроены эти самые классы (их ведь писали люди для упрощения каких-то своих задач) не сможешь понять как они работают. Я вот смотрю на эти запросы и со своим приверженством чтоли к языкам так-называемого "среднего уровня", не понимаю чего хотел программист получить, без обид :).
Приятно конечно осознать, что SQL у кого-то ассоциируется с ассемблером, но все же SQL также написан для людей (не как ассемблер - словесное представление машинных кодов) и надеюсь, что Active Record (как всеже дополнительное звено) не является помехой для конструирования гибких запросов к базе данных.
Не сочти за критику, это лишь мое первое представление, обещаю ознакомиться с Active Record.</description>
		<content:encoded><![CDATA[<p>Обижаться конечно же не стану, не для того вопрос задал.<br />
Обязательно попытаюсь узнать что такое Ruby и с чем эти вкусности едят :).<br />
Ну а по поводу сложности и рутины - не зная как устроены эти самые классы (их ведь писали люди для упрощения каких-то своих задач) не сможешь понять как они работают. Я вот смотрю на эти запросы и со своим приверженством чтоли к языкам так-называемого &#8220;среднего уровня&#8221;, не понимаю чего хотел программист получить, без обид :).<br />
Приятно конечно осознать, что SQL у кого-то ассоциируется с ассемблером, но все же SQL также написан для людей (не как ассемблер - словесное представление машинных кодов) и надеюсь, что Active Record (как всеже дополнительное звено) не является помехой для конструирования гибких запросов к базе данных.<br />
Не сочти за критику, это лишь мое первое представление, обещаю ознакомиться с Active Record.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dmytro Shteflyuk</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47077</link>
		<dc:creator>Dmytro Shteflyuk</dc:creator>
		<pubDate>Wed, 30 Nov 2011 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47077</guid>
		<description>Этот таинственный язык -- Ruby. Данная заметка посвящена использованию Ruby on Rails (фрейморка), в частности Active Record (ORM этого фреймворка).

Твой воспрос не особо корректен. Это то же самое, что спросить "Зачем использовать ПХП и почему нельзя использовать классический ассемблер?" (без обид, ничего личного) :-)

Active Record берет на себя все сложности (и рутину) составления типовых SQL-запросов, а также конструирует объекты (сущности) вашего приложения из результатов запроса. В общем много всяких вкусностей, настоятельно рекомендую хотя бы посмотреть (скринкаст можно найти на &lt;a href="http://rubyonrails.org/screencasts" rel="nofollow"&gt;официальном сайте Ruby on Rails&lt;/a&gt;) или почитать что-нибудь об этом фреймворке, даже если не собираетесь его использовать.</description>
		<content:encoded><![CDATA[<p>Этот таинственный язык &#8212; Ruby. Данная заметка посвящена использованию Ruby on Rails (фрейморка), в частности Active Record (ORM этого фреймворка).</p>
<p>Твой воспрос не особо корректен. Это то же самое, что спросить &#8220;Зачем использовать ПХП и почему нельзя использовать классический ассемблер?&#8221; (без обид, ничего личного) <img src='http://kpumuk.info/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Active Record берет на себя все сложности (и рутину) составления типовых SQL-запросов, а также конструирует объекты (сущности) вашего приложения из результатов запроса. В общем много всяких вкусностей, настоятельно рекомендую хотя бы посмотреть (скринкаст можно найти на <a href="http://rubyonrails.org/screencasts" rel="nofollow" onclick="javascript:pageTracker._trackPageview ('/outbound/rubyonrails.org');">официальном сайте Ruby on Rails</a>) или почитать что-нибудь об этом фреймворке, даже если не собираетесь его использовать.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47072</link>
		<dc:creator>Alex</dc:creator>
		<pubDate>Tue, 30 Nov 2010 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-47072</guid>
		<description>Вопрос чисто из любопытства :)
Какой язык используется в этом примере и почему нельзя было использовать классический SQL запрос с оператором JOIN?</description>
		<content:encoded><![CDATA[<p>Вопрос чисто из любопытства <img src='http://kpumuk.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Какой язык используется в этом примере и почему нельзя было использовать классический SQL запрос с оператором JOIN?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Julik</title>
		<link>http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-35513</link>
		<dc:creator>Julik</dc:creator>
		<pubDate>Tue, 30 Nov 2004 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://kpumuk.info/ruby-on-rails/using-sub-queries-to-avoid-multiple-db-requests-in-rails/#comment-35513</guid>
		<description>Sure thing.

http://bugs.mysql.com/bug.php?id=9021</description>
		<content:encoded><![CDATA[<p>Sure thing.</p>
<p><a href="http://bugs.mysql.com/bug.php?id=9021" rel="nofollow">http://bugs.mysql.com/bug.php?id=9021</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
