<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://fashion.hosmoz.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Digital Fashion - sql</title>
  <link>http://fashion.hosmoz.net/</link>
  <description>Rien de grand ne se fit jamais sans enthousiasme.</description>
  <language>en</language>
  <pubDate>Fri, 04 Jul 2008 12:26:10 +0200</pubDate>
  <copyright>2003-2007 &amp;copy; Geoffrey Bachelet</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>MySQL, Interclassement et Recherche</title>
    <link>http://fashion.hosmoz.net/post/2006/11/14/MySQL-Interclassement-et-Recherche</link>
    <guid isPermaLink="false">urn:md5:d5ef97391a00890550e71a668793f45e</guid>
    <pubDate>Tue, 14 Nov 2006 13:16:00 +0100</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Le saviez vous ?</category>
        <category>charset</category><category>sql</category>    
    <description>    &lt;p&gt;Sur une colonne en interclassement &lt;code&gt;utf8_bin&lt;/code&gt;, une recherche de type &lt;code&gt;LIKE&lt;/code&gt; sera &lt;em&gt;case sensitive&lt;/em&gt; (sensible à la casse) par défaut (je n'ai pas cherché / trouvé de moyen d'inverser ce comportement). Alors que sur un interclassement &lt;code&gt;utf8_unicode_ci&lt;/code&gt;, la recherche se fait en mode &lt;em&gt;case insensitive&lt;/em&gt; (insensible à la casse), à moins d'employer la syntaxe &lt;code&gt;LIKE BIN 'needle'&lt;/code&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/11/14/MySQL-Interclassement-et-Recherche#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/11/14/MySQL-Interclassement-et-Recherche#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/718</wfw:commentRss>
      </item>
    
  <item>
    <title>A méditer</title>
    <link>http://fashion.hosmoz.net/post/2006/09/15/A-mediter</link>
    <guid isPermaLink="false">urn:md5:2fa64db405cb6aabe5db2ba69e9ac4e7</guid>
    <pubDate>Fri, 15 Sep 2006 13:03:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>sql</category>    
    <description>    &lt;blockquote&gt;&lt;p&gt;(13:00:26) Geoffrey: disons que le sql&lt;br /&gt;
(13:00:30) Geoffrey: plus t'en fais, moins t'en fais&lt;/p&gt;&lt;/blockquote&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/09/15/A-mediter#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/09/15/A-mediter#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/597</wfw:commentRss>
      </item>
    
  <item>
    <title>Accès à la base de données: Zend_Db</title>
    <link>http://fashion.hosmoz.net/post/2006/08/30/Acces-a-la-base-de-donnees%3A-Zend_Db</link>
    <guid isPermaLink="false">urn:md5:e0b79960386731491171060549af347d</guid>
    <pubDate>Thu, 31 Aug 2006 18:08:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Coding</category>
        <category>sql</category><category>zend framework</category>    
    <description>&lt;p&gt;Arrive fatalement un moment dans un projet où le besoin d'attaquer sauvagement une base de données se fait sentir. Peu importe le SGBD utilisé, les besoins de base sont souvent les mêmes et se résument bêtement a ce que certains appellent les &lt;em&gt;CRUD actions&lt;/em&gt;, c'est à dire &lt;em&gt;Create&lt;/em&gt;, &lt;em&gt;Read&lt;/em&gt;, &lt;em&gt;Update&lt;/em&gt;, &lt;em&gt;Delete&lt;/em&gt;. Le Zend Framework fournit une méthode simplissime pour gérer ces actions basiques, et des facilités pour gérer des opérations plus avancées. Prenons pour exemple une table contenant les informations des membres d'un site, que nous appellerons &lt;code&gt;members&lt;/code&gt; (comme c'est original), et qui ne contiendra pour le moment que quelques champs (dont les noms seront, j'espère, assez explicite): &lt;code&gt;mail&lt;/code&gt;, &lt;code&gt;password&lt;/code&gt; et &lt;code&gt;created_on&lt;/code&gt;.&lt;/p&gt;    &lt;h4&gt;Configuration de Zend_Db&lt;/h4&gt;


&lt;p&gt;Pour commencer, il nous faut configurer &lt;code&gt;Zend_Db&lt;/code&gt;. Rien de plus simple, cette classe possède une méthode &lt;code&gt;factory&lt;/code&gt; qui accepte deux arguments: le type de base de données à utiliser, et un tableau de paramètres. Il faut ensuite spécifier à &lt;code&gt;Zend_Db_Table&lt;/code&gt; que nous souhaitons utiliser cette instance précise de &lt;code&gt;Zend_Db&lt;/code&gt;.&lt;/p&gt;


&lt;pre&gt;$params = array(
	'host' =&amp;gt; 'localhost',
	'username' =&amp;gt; 'root',
	'password' =&amp;gt; 'someobscurepassword',
	'dbname' =&amp;gt; 'myappname'
);
$db = Zend_Db::factory('PDO_MYSQL', $params);
Zend_Db_Table::setDefaultAdapter($db);&lt;/pre&gt;


&lt;h4&gt;Opérations CRUD de base&lt;/h4&gt;


&lt;p&gt;Il suffit d'étendre la classe &lt;code&gt;Zend_Db_Table&lt;/code&gt; pour obtenir un Modèle spécifique à notre table de membres:&lt;/p&gt;


&lt;pre&gt;class Members extends Zend_Db_Table {

}&lt;/pre&gt;


&lt;p&gt;C'est tout ? Oui, c'est tout. Une fois ceci fait, nous pouvons manipuler la table très simplement, par exemple, pour insérer une ligne:&lt;/p&gt;


&lt;pre&gt;$member = new Members;

$data = array(
	'mail' =&amp;gt; 'geoffrey@nevra.net',
	'password' =&amp;gt; md5('password'),
	'created_on' =&amp;gt; date('Y-m-d H:i:s'),
);

$member-&amp;gt;insert($data);&lt;/pre&gt;


&lt;p&gt;En plus de la méthode &lt;code&gt;insert&lt;/code&gt;, &lt;code&gt;Zend_Db_Table&lt;/code&gt; implémente les méthodes &lt;code&gt;update&lt;/code&gt; et &lt;code&gt;delete&lt;/code&gt;, ainsi que &lt;code&gt;find&lt;/code&gt;, qui s'utilisent ainsi (en admettant que le champs &lt;code&gt;mail&lt;/code&gt; soit déclaré comme étant la &lt;code&gt;PRIMARY KEY&lt;/code&gt; de la table):&lt;/p&gt;


&lt;pre&gt;$member = new Members;

$db = $member-&amp;gt;getAdapter();
$where = $db-&amp;gt;quoteInto('mail = ?', 'geoffrey@nevra.net');

$data = array(
	'password' =&amp;gt; md5('other_password'),
);

$row = $member-&amp;gt;find('geoffrey@nevra.net');
$member-&amp;gt;update($data, $where);
$member-&amp;gt;delete($where);&lt;/pre&gt;


&lt;p&gt;Voilà pour les fonctionnalités de base, nous verrons une prochaine fois comment étendre les fonctionnalités de &lt;code&gt;Zend_Db_Table&lt;/code&gt; pour, entre autres, automatiser certaines taches :-)&lt;/p&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/08/30/Acces-a-la-base-de-donnees%3A-Zend_Db#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/08/30/Acces-a-la-base-de-donnees%3A-Zend_Db#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/579</wfw:commentRss>
      </item>
    
  <item>
    <title>Liens du jour</title>
    <link>http://fashion.hosmoz.net/post/2006/08/30/Liens-du-jour</link>
    <guid isPermaLink="false">urn:md5:b05ee39ead55f1ca7088f8c241b04771</guid>
    <pubDate>Wed, 30 Aug 2006 14:29:00 +0200</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Rubrique à brac</category>
        <category>javascript</category><category>optimisation</category><category>php</category><category>sql</category><category>zend framework</category>    
    <description>    &lt;p&gt;Liens en vrac:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://mysqldba.blogspot.com/&quot;&gt;MySQL DBA&lt;/a&gt;, le blog d'un &lt;acronym&gt;DBA&lt;/acronym&gt; de chez &lt;a href=&quot;http://www.flickr.com/&quot;&gt;flickr&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.thinkvitamin.com/features/webapps/serving-javascript-fast&quot;&gt;Serving Javascript Fast&lt;/a&gt;, par un développeur de chez &lt;a href=&quot;http://www.flickr.com/&quot;&gt;flickr&lt;/a&gt; (décidément...) A noter que cet article parle des méthodes de cache d'une manière assez généraliste pour être appliquée à autre chose que du JavaScript, et n'oubliez pas non plus de lire les commentaires, il y en a de très interressants.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.gen-x-design.com/archives/ajax-prototype-a-primer&quot;&gt;AJAX &amp;amp; Protoype: A Primer&lt;/a&gt;, explication simple et claire sur l'utilisation d'AJAX et des Classes avec Prototype.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.akrabat.com/category/zend-framework/&quot;&gt;Akra's Devnotes: Zend Framework&lt;/a&gt;, la catégorie Zend Framework du blog de Rob Allen, très interressante.&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/08/30/Liens-du-jour#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/08/30/Liens-du-jour#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/580</wfw:commentRss>
      </item>
    
  <item>
    <title>Découverte: SQL Server</title>
    <link>http://fashion.hosmoz.net/post/2006/04/26/527-decouverte-sql-server</link>
    <guid isPermaLink="false">urn:md5:6d5803809f6f23d0f7284aee4ba7b741</guid>
    <pubDate>Wed, 26 Apr 2006 15:46:55 +0000</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Geekeries</category>
        <category>sql</category>    
    <description>    &lt;p&gt;Aujourd'hui, pour la première fois de ma vie, j'ai touché à un &lt;acronym&gt;SQL&lt;/acronym&gt; Server. Heureusement, j'étais accompagné, et l'expérience ne fut pas trop douloureuse, Juste je me demande pourquoi ils disent &lt;code&gt;database..table&lt;/code&gt; au lieu de &lt;code&gt;database.table&lt;/code&gt;... D'ailleurs, je me demande bien comment les &lt;acronym title=&quot;Database Abstraction Layer&quot;&gt;DAL&lt;/acronym&gt; gérent ça&amp;nbsp;? Bref, c'est l'heure de faire du javascript :-)&lt;/p&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/04/26/527-decouverte-sql-server#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/04/26/527-decouverte-sql-server#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/530</wfw:commentRss>
      </item>
    
  <item>
    <title>Downgrade MySQL 5.0 vers 4.x avec APT</title>
    <link>http://fashion.hosmoz.net/post/2006/04/13/520-downgrade-mysql-50-vers-4x-avec-apt</link>
    <guid isPermaLink="false">urn:md5:ded35d072423fec57bbb45dbef6078d9</guid>
    <pubDate>Thu, 13 Apr 2006 13:22:37 +0000</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Le saviez vous ?</category>
        <category>sql</category><category>ubuntu</category>    
    <description>    &lt;p&gt;Si vous avez un mysql-server-5.0 d'installé et que vous souhaitez le downgrader vers un 4.x (pour une raison X ou Y), il est probable que &lt;acronym&gt;APT&lt;/acronym&gt; vous jette ainsi:&lt;/p&gt;


&lt;pre&gt;Aborting downgrade from (at least) 5.0 to 4.1.
dpkg: error processing mysql-server-4.1_4.1.15-1ubuntu5_i386.deb (--install):
 subprocess pre-installation script returned error exit status 1
Errors were encountered while processing:
 mysql-server-4.1_4.1.15-1ubuntu5_i386.deb&lt;/pre&gt;


&lt;p&gt;So what&amp;nbsp;? Il s'agit en fait d'un problème causé par la présence du &lt;em&gt;/var/lib/mysql&lt;/em&gt; du mysql-server-5.0, il suffit de le supprimer, ou de le déplacer pour backup:&lt;/p&gt;


&lt;pre&gt;rm -rf /var/lib/mysql
mv /var/lib/mysql /var/lib/mysql.old&lt;/pre&gt;


&lt;p&gt;Une des deux seulement hein&amp;nbsp;! Puis on relance l'installation:&lt;/p&gt;


&lt;pre&gt;apt-get install mysql-server-4.1&lt;/pre&gt;


&lt;p&gt;Ce post inaugure le retour en douceur des posts techniques sur ce blog.&lt;/p&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/04/13/520-downgrade-mysql-50-vers-4x-avec-apt#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/04/13/520-downgrade-mysql-50-vers-4x-avec-apt#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/525</wfw:commentRss>
      </item>
    
  <item>
    <title>MySQL, type de champ ENUM et type de valeur</title>
    <link>http://fashion.hosmoz.net/post/2006/02/05/492-mysql-type-de-champ-enum-et-type-de-valeur</link>
    <guid isPermaLink="false">urn:md5:148d04c58d0001f8a3b19555679eb16b</guid>
    <pubDate>Sun, 05 Feb 2006 02:34:36 +0000</pubDate>
    <dc:creator>Geoffrey</dc:creator>
        <category>Le saviez vous ?</category>
        <category>sql</category>    
    <description>    &lt;p&gt;Imaginons la table suivante:&lt;/p&gt;


&lt;pre&gt;+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| foobar | enum('0','1') | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+&lt;/pre&gt;


&lt;p&gt;Exemple complètement trivial, je sais. L'astuce du jour porte donc sur les requêtes de type &lt;code&gt;SELECT&lt;/code&gt; avec un &lt;code&gt;WHERE&lt;/code&gt; portant sur un champ de type &lt;code&gt;ENUM&lt;/code&gt;. Ce qu'il faut savoir, c'est que la déclaration d'un champ en tant qu'&lt;code&gt;ENUM&lt;/code&gt; fait qu'on ne peut pas considérer ce champs comme un entier. Ainsi, la requête suivante retournera un &lt;em&gt;Empty set&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; foobar &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; foobar = &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;;&lt;/pre&gt;


&lt;p&gt;Quelque soit le contenu de la table &lt;code&gt;foobar&lt;/code&gt;. Il faut écrire la requête comme suit:&lt;/p&gt;

&lt;pre&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; foobar &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; foobar = &lt;span style=&quot;color: #ff0000;&quot;&gt;'0'&lt;/span&gt;;&lt;/pre&gt;


&lt;p&gt;Et pour les petits malins qui se croient plus malins que MySQL:&lt;/p&gt;


&lt;pre&gt;mysql&amp;gt; create table foobar (foo enum('0', '1'), bar(0, 1));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(0, 1))' at line 1&lt;/pre&gt;</description>
    
    
    
          <comments>http://fashion.hosmoz.net/post/2006/02/05/492-mysql-type-de-champ-enum-et-type-de-valeur#comment-form</comments>
      <wfw:comment>http://fashion.hosmoz.net/post/2006/02/05/492-mysql-type-de-champ-enum-et-type-de-valeur#comment-form</wfw:comment>
      <wfw:commentRss>http://fashion.hosmoz.net/feed/rss2/comments/490</wfw:commentRss>
      </item>
    
</channel>
</rss>