Snippets tagged "sql" Snippets tagged "sql"

Gestion des tags en SQL

Un schema classique de gestion de tags :

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;

Pour récupérer tous les projets taggué php ou mysql :

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');

Pour récupérer tous les projets taggué php et mysql :

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 = "php" 
  AND t2.tag_text = "mysql";

Tiré et adapté de la présentation Join-fu de Jay Pipes

by Nicolas Perriault on 2008-05-15, tagged join  mysql  sql  tags 

[Symfony] [Propel] Afficher la dernière requête effectuée

Pour afficher la dernière requête effectuée avec Propel :

echo Propel::getConnection()->getLastExecutedQuery();

C'est tout con, hein ?

by Nicolas Perriault on 2007-12-10, tagged propel  sql  symfony 

[Symfony] Traiter les OR sql avec Propel

Voici comment gérer les "ou" SQL dans Propel :

$criteria = new Criteria();
$criteria->add(TotoPeer::NAME, 'Gérard Bouchard');
$criterion = $criteria->getNewCriterion (
  TotoPeer::ID, 5
)->addOr($criteria->getNewCriterion (
  TotoPeer::ID, 10
));
$criteria->addAnd($criterion);
TotoPeer::doSelect($criteria);

Ceci donnera quelque chose comme :

SELECT 
  * 
FROM 
  toto 
WHERE 
  toto.NAME = 'Gérard Bouchard' 
  AND 
  (
    toto.ID = 5 
    OR 
    toto.ID = 10
  );
by Nicolas Perriault on 2007-01-15, tagged mysql  php  propel  sql  symfony 

[Symfony] Executer une requête spécifique (custom query) avec Propel

$con = Propel::getConnection();
$stmt = $con->prepareStatement('SELECT foo, bar FROM baz WHERE name=? AND active=?');
$stmt->setString(1, 'MyName');
$stmt->setString(2, '1');
$rs = $stmt->executeQuery(ResultSet::FETCHMODE_NUM);

Ou encore plus con :

Propel::getConnection()->executeUpdate('SET FOREIGN_KEY_CHECKS=0');
by Nicolas Perriault on 2006-11-28, tagged mysql  propel  sql  symfony