2009-07-08 8 views
0

Bonjour,Zend_Db_Select - Comment écrire cette déclaration SQL

j'ai quelques problèmes avec le Zend Framework et Zend_Db_Select, je veux utiliser ce (travail) Déclaration SQL comme Zend DB Select Déclaration:

select 
    oslang 
from 
    oslang, os 
where 
    oslang.oslang_id = os.oslang_id and 
    ossubversion_id = 1 

je tryed à suivre mais il doenst travail:

try { 
     $select = $this->_db->select() 
      ->from('OSLANG') 
      ->from('OS') 
      ->where("OSLANG.OSLANG_ID = OS.OSLANG_ID") 
      ->where("OSSUBVERSION_ID = ?", $subVersionId); 
     $results = $select->query()->fetchAll(); 
    } catch (Exception $e) { 
     $this->_logException($e); 
     $results = array(); 
    } 

il doit être possible que plus d'un système d'exploitation est associée à un OSLANG_ID

Est-ce que quelqu'un a une idée gentille où mon erreur est?

Répondre

2
 $select = $this->_db->select() 
      ->from('OSLANG') 
      ->join('OS',"OSLANG.OSLANG_ID = OS.OSLANG_ID") 
      ->where("OSSUBVERSION_ID = ?", $subVersionId); 
     $results = $select->query()->fetchAll(); 
+0

Not 100% ;-) Il doit être possible de sélectionner à partir de l'OS tous les enregistrements associés à OSLANG_ID. Il y a X systèmes d'exploitation associés au même OSLANG_ID horrible je maintenant;) – opHASnoNAME

0
SELECT * FROM x, y 

est égal à

SELECT * FROM x CROSS JOIN y 

Alors, essayez d'utiliser joinCross() méthode. Selon son PHPDoc:

Le nom de $ et $ paramètres suivent cols la même logique que décrit dans la méthode de() .

Ça va être quelque chose comme ça:

$select = $this->_db->select() 
     ->from('OSLANG') 
     ->joinCross('OS') 
     ->where("OSLANG.OSLANG_ID = OS.OSLANG_ID") 
     ->where("OSSUBVERSION_ID = ?", $subVersionId); 
    $results = $select->query()->fetchAll(); 

Remarque, si vous utilisez MySQL, CROSS JOIN est égal à INNER JOIN:

MySQL, CROSS JOIN est un équivalent syntaxique à INNER JOIN (ils peuvent se remplacer). En SQL standard, ils ne sont pas équivalents. (MySQL 5.1 Reference Manual :: JOIN Syntax)

La seule différence est que:

INNER JOIN est utilisé avec une clause ON, CROSS JOIN est utilisé autrement

Ainsi, dans MySQL, vous pouvez omettre l'aide INNER ou mots-clés CROSS, la syntaxe est:

... tableReference [INNER | CROSS] JOIN tableFactor [joinCondition] ...