<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Commentaires sur : Optimiser les requêtes SQL de CakePHP</title>
	<atom:link href="http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp</link>
	<description>Le cadre de développement PHP et son utilisation au jour le jour.</description>
	<lastBuildDate>Sun, 05 Feb 2012 10:59:57 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Par : lioninho11</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-2975</link>
		<dc:creator>lioninho11</dc:creator>
		<pubDate>Sun, 07 Jun 2009 03:54:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-2975</guid>
		<description>&lt;p&gt;Juste pour savoir, comment pourrait -on faire pour réccupérer le nbre de commentaire associé à un arcticle, et l&#039;afficle dans la vue &quot;index par default&quot;.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Juste pour savoir, comment pourrait -on faire pour réccupérer le nbre de commentaire associé à un arcticle, et l&#8217;afficle dans la vue &laquo;&nbsp;index par default&nbsp;&raquo;.</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Nicolas</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-2471</link>
		<dc:creator>Nicolas</dc:creator>
		<pubDate>Fri, 24 Apr 2009 14:50:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-2471</guid>
		<description>&lt;p&gt;Bonjour,&lt;/p&gt;

&lt;p&gt;J&#039;ai bien lu cet article, il m&#039;a permet déjà d&#039;y voir un peu plus clair mais j&#039;ai un problème plus profond pour ma part, et j&#039;espère que vous pourrai m&#039;aider :)&lt;/p&gt;

&lt;p&gt;J&#039;ai 5 tables principales  : categories, sub_categories, marques, modeles et annonces&lt;/p&gt;

&lt;p&gt;Dans annonces, j&#039;ai un index modele&lt;em&gt;id
Dans modeles &gt; marque&lt;/em&gt;id
Dans marques &gt; sub&lt;em&gt;category&lt;/em&gt;id
Dans sub&lt;em&gt;categories &gt; category&lt;/em&gt;id&lt;/p&gt;

&lt;p&gt;J&#039;aimerai pouvoir faire plusieurs choses avec ceci !&lt;/p&gt;

&lt;p&gt;La première que je puisse par exemple générer un plan de site total, les sous cat appartenant a chaque cat, puis chaque marque appartenant a chaque sous cat, etc...&lt;/p&gt;

&lt;p&gt;Je n&#039;y arrive pas car bien entendu c&#039;est à 5 niveaux, et votre astuce montre seulement 2 niveaux.&lt;/p&gt;

&lt;p&gt;Comment je peux faire svp ?&lt;/p&gt;

&lt;p&gt;Seconde et dernière question, si par exemple, je souhaite afficher le nbre d&#039;annonces (donc la dernière table) sur ma liste des catégories (cette catégorie abc contient y annonces), comment dois je m&#039;y prendre.&lt;/p&gt;

&lt;p&gt;Et biensur le tout d&#039;un facon &quot;propre&quot;.&lt;/p&gt;

&lt;p&gt;Car rien qu&#039;en faisant un simple recursive = 4, je me retrouve avec 30 requetes SQL !! avec plein de IN.&lt;/p&gt;

&lt;p&gt;Merci d&#039;avance.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Bonjour,</p>

<p>J&#8217;ai bien lu cet article, il m&#8217;a permet déjà d&#8217;y voir un peu plus clair mais j&#8217;ai un problème plus profond pour ma part, et j&#8217;espère que vous pourrai m&#8217;aider <img src='http://www.formation-cakephp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>J&#8217;ai 5 tables principales  : categories, sub_categories, marques, modeles et annonces</p>

<p>Dans annonces, j&#8217;ai un index modele<em>id
Dans modeles &gt; marque</em>id
Dans marques &gt; sub<em>category</em>id
Dans sub<em>categories &gt; category</em>id</p>

<p>J&#8217;aimerai pouvoir faire plusieurs choses avec ceci !</p>

<p>La première que je puisse par exemple générer un plan de site total, les sous cat appartenant a chaque cat, puis chaque marque appartenant a chaque sous cat, etc&#8230;</p>

<p>Je n&#8217;y arrive pas car bien entendu c&#8217;est à 5 niveaux, et votre astuce montre seulement 2 niveaux.</p>

<p>Comment je peux faire svp ?</p>

<p>Seconde et dernière question, si par exemple, je souhaite afficher le nbre d&#8217;annonces (donc la dernière table) sur ma liste des catégories (cette catégorie abc contient y annonces), comment dois je m&#8217;y prendre.</p>

<p>Et biensur le tout d&#8217;un facon &laquo;&nbsp;propre&nbsp;&raquo;.</p>

<p>Car rien qu&#8217;en faisant un simple recursive = 4, je me retrouve avec 30 requetes SQL !! avec plein de IN.</p>

<p>Merci d&#8217;avance.</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : othman ouahbi</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1281</link>
		<dc:creator>othman ouahbi</dc:creator>
		<pubDate>Thu, 23 Oct 2008 18:31:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1281</guid>
		<description>&lt;p&gt;Es-tu sûr que tu n&#039;as pas de duplication pour le changement de hasMany en hasOne ?&lt;/p&gt;

&lt;p&gt;Ce n&#039;est pas si facile que ça sinon les développeurs aurait codé hasMany avec un LEFT JOIN. Il faut faire DISTINCT Auteur.id&lt;/p&gt;

&lt;p&gt;Un autre problème avec ça est la pagination.
Cake ne gère pas la pagination avec DISTINCT.
Car il faut deux requêtes ( un COUNT() et un SELECT normal ) avec DISTINCT, la bonne rêquete est COUNT(DISTINCT field). La dernière consomme énormément de ressources.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Es-tu sûr que tu n&#8217;as pas de duplication pour le changement de hasMany en hasOne ?</p>

<p>Ce n&#8217;est pas si facile que ça sinon les développeurs aurait codé hasMany avec un LEFT JOIN. Il faut faire DISTINCT Auteur.id</p>

<p>Un autre problème avec ça est la pagination.
Cake ne gère pas la pagination avec DISTINCT.
Car il faut deux requêtes ( un COUNT() et un SELECT normal ) avec DISTINCT, la bonne rêquete est COUNT(DISTINCT field). La dernière consomme énormément de ressources.</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Cherry on the&#8230; &#187; Deux nouveaux articles sur CakePHP</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1174</link>
		<dc:creator>Cherry on the&#8230; &#187; Deux nouveaux articles sur CakePHP</dc:creator>
		<pubDate>Tue, 26 Aug 2008 08:47:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1174</guid>
		<description>&lt;p&gt;[...] premier rappelle quelques principes d&#8217;optimisation des requêtes SQL dans le contexte de CakePHP, [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] premier rappelle quelques principes d&#8217;optimisation des requêtes SQL dans le contexte de CakePHP, [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Pierre-Emmanuel Fringant</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1168</link>
		<dc:creator>Pierre-Emmanuel Fringant</dc:creator>
		<pubDate>Mon, 25 Aug 2008 16:13:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1168</guid>
		<description>&lt;p&gt;@djenvert : merci pour l&#039;argument, j&#039;ai mis l&#039;article à jour.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@djenvert : merci pour l&#8217;argument, j&#8217;ai mis l&#8217;article à jour.</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Guillaume aka djenvert</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1167</link>
		<dc:creator>Guillaume aka djenvert</dc:creator>
		<pubDate>Mon, 25 Aug 2008 11:48:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1167</guid>
		<description>&lt;p&gt;Très bon article, comme d&#039;hab.
j&#039;ajouterais une raison pour favoriser l&#039;utilisation des méthodes &quot;toutes faites&quot; de CakePHP : à ma connaissance, quand on utilise Model::query(), les callbacks (afterXXX, beforeXXX) et ce qui peut leur être associés (behaviors...) ne sont pas appelés, ce qui peut créer des incohérences si on a mis dans ces callbacks un peu de code.&lt;/p&gt;

&lt;p&gt;Sinon, Containable, c&#039;est quand même quasi miraculeux. Je me demande comment on faisait avant. La multiplicité des syntaxes me perturbe encore un peu, toutefois. Et il y a quelques trucs qu&#039;il ne gère pas encore, à ma connaissance (le &quot;group by&quot;, qui est géré dans Model::find() depuis peu, par exemple).&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Très bon article, comme d&#8217;hab.
j&#8217;ajouterais une raison pour favoriser l&#8217;utilisation des méthodes &laquo;&nbsp;toutes faites&nbsp;&raquo; de CakePHP : à ma connaissance, quand on utilise Model::query(), les callbacks (afterXXX, beforeXXX) et ce qui peut leur être associés (behaviors&#8230;) ne sont pas appelés, ce qui peut créer des incohérences si on a mis dans ces callbacks un peu de code.</p>

<p>Sinon, Containable, c&#8217;est quand même quasi miraculeux. Je me demande comment on faisait avant. La multiplicité des syntaxes me perturbe encore un peu, toutefois. Et il y a quelques trucs qu&#8217;il ne gère pas encore, à ma connaissance (le &laquo;&nbsp;group by&nbsp;&raquo;, qui est géré dans Model::find() depuis peu, par exemple).</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Pierre-Emmanuel Fringant</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1166</link>
		<dc:creator>Pierre-Emmanuel Fringant</dc:creator>
		<pubDate>Sun, 24 Aug 2008 10:56:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1166</guid>
		<description>&lt;p&gt;Ah oui, là effectivement ce serait le pied. Il est cependant possible de simplifier un peu la notation du Containable, je n&#039;ai présenté ici que la notation la plus stricte (que je trouve plus claire). L&#039;exemple du 4 peut se simplifier comme suit :
&lt;pre lang=&quot;php&quot;&gt;$data = $this-&gt;Article-&gt;find(
    &#039;all&#039;,
    array(
        &#039;fields&#039; =&gt; array(&#039;Article.titre&#039;, &#039;Article.created&#039;),
        &#039;contain&#039; =&gt; &#039;Tag.label&#039;
    )
);
&lt;/pre&gt;&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Ah oui, là effectivement ce serait le pied. Il est cependant possible de simplifier un peu la notation du Containable, je n&#8217;ai présenté ici que la notation la plus stricte (que je trouve plus claire). L&#8217;exemple du 4 peut se simplifier comme suit :

</p>
<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Article</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">find</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'all'</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'fields'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Article.titre'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Article.created'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'contain'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Tag.label'</span>
    <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


]]></content:encoded>
	</item>
	<item>
		<title>Par : Pixelastic</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1165</link>
		<dc:creator>Pixelastic</dc:creator>
		<pubDate>Sun, 24 Aug 2008 10:50:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1165</guid>
		<description>&lt;p&gt;Je suis d&#039;accord qu&#039;un peu d&#039;automatisation ne serait peut-être pas un mal. Pour reprendre ton exemple que l&#039;on n&#039;ai qu&#039;à écrire :&lt;/p&gt;

&lt;p&gt;&#039;fields&#039; =&gt; array(&#039;Article.titre&#039;, &#039;Article.created&#039;, &#039;Tag.name&#039;)&lt;/p&gt;

&lt;p&gt;et que le Containable aille chercher tout seul le Tag, sans avoir à le préciser&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Je suis d&#8217;accord qu&#8217;un peu d&#8217;automatisation ne serait peut-être pas un mal. Pour reprendre ton exemple que l&#8217;on n&#8217;ai qu&#8217;à écrire :</p>

<p>&#8216;fields&#8217; =&gt; array(&#8216;Article.titre&#8217;, &#8216;Article.created&#8217;, &#8216;Tag.name&#8217;)</p>

<p>et que le Containable aille chercher tout seul le Tag, sans avoir à le préciser</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Pierre-Emmanuel Fringant</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1164</link>
		<dc:creator>Pierre-Emmanuel Fringant</dc:creator>
		<pubDate>Sun, 24 Aug 2008 10:44:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1164</guid>
		<description>&lt;p&gt;@Jay : j&#039;ai travaillé sur une appli avec des dizaines de milliers d&#039;enregistrements, et à part cette astuce de jointure forcée sans laquelle l&#039;application était à genoux, je n&#039;ai rien eu à changer dans mes habitudes pour que tout marche vite et bien. Si cela peut te rassurer...&lt;/p&gt;

&lt;p&gt;@Damien : Automatiquement ? Comment voudrais-tu qu&#039;en faisant un findAll sur les Articles en ne voulant que les Tags associés et pas les Auteurs, Cake sache automatiquement associer les bons modèles ?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>@Jay : j&#8217;ai travaillé sur une appli avec des dizaines de milliers d&#8217;enregistrements, et à part cette astuce de jointure forcée sans laquelle l&#8217;application était à genoux, je n&#8217;ai rien eu à changer dans mes habitudes pour que tout marche vite et bien. Si cela peut te rassurer&#8230;</p>

<p>@Damien : Automatiquement ? Comment voudrais-tu qu&#8217;en faisant un findAll sur les Articles en ne voulant que les Tags associés et pas les Auteurs, Cake sache automatiquement associer les bons modèles ?</p>]]></content:encoded>
	</item>
	<item>
		<title>Par : Damien</title>
		<link>http://www.formation-cakephp.com/53/optimiser-requetes-sql-cakephp/comment-page-1#comment-1163</link>
		<dc:creator>Damien</dc:creator>
		<pubDate>Sun, 24 Aug 2008 07:39:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.formation-cakephp.com/?p=53#comment-1163</guid>
		<description>&lt;p&gt;En effet, Containable permet de corriger cet éventuel problème.
Cela me semble très lourd cependant. Surtout lorsque c&#039;est le genre de choses qui pourrait être fait automatiquement. M&#039;enfin bon.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>En effet, Containable permet de corriger cet éventuel problème.
Cela me semble très lourd cependant. Surtout lorsque c&#8217;est le genre de choses qui pourrait être fait automatiquement. M&#8217;enfin bon.</p>]]></content:encoded>
	</item>
</channel>
</rss>

