Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonsoir,
Certains auront remarqué que j'ai supprimé mon message précédent car en lisant certains messages du forum j'ai trouvé des réponses à certaines questions que je me posais.
Ma question est maintenant la suivante :
Je souhaite faire une jointure entre deux tables 'News' et 'Users'.
Pour cela j'utilise un modèle :
<?php class News extends Zend_Db_Table_Abstract { protected $_name = 'news'; protected $_primary = 'news_id'; public function getNews($order = 'date_creation', $sort = 'DESC') { $sql = 'SELECT news_id, news.user_id, date_creation, date_modification '; $sql .= 'title, content, username FROM news JOIN users '; $sql .= 'USING(user_id) ORDER BY ' . $order . ' ' . $sort; return parent::fetchAll($sql); } } ?>
En faisant ainsi j'obtiens une erreur de cardinalité dont je ne comprend pas le sens :
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)' in /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Statement/Pdo.php:227 Stack trace: #0 /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Statement.php(298): Zend_Db_Statement_Pdo->_execute(Array) #1 /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Adapter/Abstract.php(262): Zend_Db_Statement->execute(Array) #2 /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Adapter/Pdo/Abstract.php(206): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array) #3 /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Table/Abstract.php(1095): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Select)) #4 /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Table/Abstract.php(978): Zend_Db_Table_Abstract->_fetch('SELECT news_id,...', NULL, NULL, NULL) #5 /Users/laurent/Sites/www.ouaibou.info/application/models/News.php(13): Zend_Db_Table_Abstract->fetchAll( in /Users/laurent/Sites/www.ouaibou.info/library/Zend/Db/Statement/Pdo.php on line 227
Quelqu'un saurait il m'expliquer pour ça fonctionne pas ?
Merci.
Cordialement,
Laurent
Hors ligne
Bonjour,
Issue de la doc Mysql :
"La clause USING (column_list) recense la liste des colonnes qui doivent exister dans les deux tables. Les clauses USING suivantes sont identiques :"
a LEFT JOIN b USING (c1,c2,c3) a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
As tu un champ user_id dans tes 2 tables ?
Hors ligne
yannux a écrit:
As tu un champ user_id dans tes 2 tables ?
Oui
J'ai finalement réussi à m'en sortir en faisant ainsi :
<?php class News extends Zend_Db_Table_Abstract { protected $_name = 'news'; protected $_primary = 'news_id'; public function getNews($order = 'date_creation', $sort = 'DESC') { $select = $this->getDefaultAdapter()->select(); $select->from('news') ->join('users', 'news.user_id=users.user_id', 'username') ->order($order . ' ' . $sort); return $this->getDefaultAdapter()->fetchAll($select); } } ?>
Hors ligne