<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Latest snippets tagged sql mysql</title>
  <link rel="alternate" href="http://snippets.prendreuncafe.com/snippets/tagged/sql+mysql/order_by/date"></link>
  <id>http://snippets.prendreuncafe.com/snippets/tagged/sql+mysql/order_by/date</id>
  <updated>2008-05-15T22:06:43Z</updated>
  <author>
    <name>Symfony</name>
    <author_email>noreply@symfony-project.com</author_email>
  </author>
<entry>
  <title>Gestion des tags en SQL</title>
  <link href="http://snippets.prendreuncafe.com/snippet/93"></link>
  <updated>2008-05-15T22:06:43Z</updated>
  <id>93</id>
  <summary type="html">Un schema classique de gestion de tags :

[code=sql]
CREATE TABLE Project ( 
  project_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  name VARCHAR(50) NOT NULL, 
  url TEXT NOT NULL, 
  PRIMARY KEY (project_id) 
) ENGINE=MyISAM;

CREATE TABLE Tags ( 
  tag_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  tag_text VARCHAR(50) NOT NULL, 
  PRIMARY KEY (tag_id), 
  INDEX (tag_text) 
) ENGINE=MyISAM; 

CREATE TABLE Tag2Project ( 
  tag INT UNSIGNED NOT NULL, 
  project INT UNSIGNED NOT NULL, 
  PRIMARY KEY (tag, project), 
  INDEX rv_primary (project, tag) 
) ENGINE=MyISAM;
[/code]

Pour récupérer tous les projets taggué `php` **ou** `mysql` :

[code=sql]
SELECT p.name 
FROM Project p 
  INNER JOIN Tag2Project t2p 
    ON p.project_id = t2p.project 
  INNER JOIN Tag t 
    ON t2p.tag = t.tag_id 
WHERE t.tag_text IN ('mysql', 'php');
[/code]

Pour récupérer tous les projets taggué `php` **et** `mysql` :

[code=sql]
SELECT p.name 
FROM Project p 
  CROSS JOIN Tag t1 
  CROSS JOIN Tag t2 
  INNER JOIN Tag2Project t2p 
    ON p.project_id = t2p.project 
      AND t2p.tag = t1.tag_id 
  INNER JOIN Tag2Project t2p2 
    ON t2p.project = t2p2.project 
      AND t2p2.tag = t2.tag_id 
WHERE t1.tag_text = &quot;php&quot; 
  AND t2.tag_text = &quot;mysql&quot;;
[/code]

Tiré et adapté de la présentation [Join-fu de Jay Pipes](http://jpipes.com/presentations/joinfu/joinfu.pdf)</summary>
</entry>
<entry>
  <title>[Symfony] Traiter les OR sql avec Propel</title>
  <link href="http://snippets.prendreuncafe.com/snippet/40"></link>
  <updated>2007-01-15T12:05:04Z</updated>
  <id>40</id>
  <summary type="html">Voici comment gérer les &quot;ou&quot; SQL dans Propel :

[code]
$criteria = new Criteria();
$criteria-&gt;add(TotoPeer::NAME, 'Gérard Bouchard');
$criterion = $criteria-&gt;getNewCriterion (
  TotoPeer::ID, 5
)-&gt;addOr($criteria-&gt;getNewCriterion (
  TotoPeer::ID, 10
));
$criteria-&gt;addAnd($criterion);
TotoPeer::doSelect($criteria);
[/code]

Ceci donnera quelque chose comme :

[code]
SELECT 
  * 
FROM 
  toto 
WHERE 
  toto.NAME = 'Gérard Bouchard' 
  AND 
  (
    toto.ID = 5 
    OR 
    toto.ID = 10
  );
[/code]</summary>
</entry>
<entry>
  <title>[Symfony] Executer une requête spécifique (custom query) avec Propel</title>
  <link href="http://snippets.prendreuncafe.com/snippet/22"></link>
  <updated>2006-11-28T10:10:13Z</updated>
  <id>22</id>
  <summary type="html">[code]
$con = Propel::getConnection();
$stmt = $con-&gt;prepareStatement('SELECT foo, bar FROM baz WHERE name=? AND active=?');
$stmt-&gt;setString(1, 'MyName');
$stmt-&gt;setString(2, '1');
$rs = $stmt-&gt;executeQuery(ResultSet::FETCHMODE_NUM);
[/code]

Ou encore plus con :

[code]
Propel::getConnection()-&gt;executeUpdate('SET FOREIGN_KEY_CHECKS=0');
[/code]</summary>
</entry>
</feed>