2010-12-13 21 views
0

table1 (id, champ1, champ2, field3), table2 (id, table1_id, champ1, champ2, field3), et la requête va comme cecicomment construire la requête suivante (jointure gauche-droite et mise à jour multiple) dans le framework zend?

select table1.*, table2.field2 as newfield from tabel1 
left join on table2 on table1.id = table2.table1_id; 

J'ai essayé code suivant sur le modèle

$select = $this->select('table1.*', 'table2.field1') 
->from('table1') 
->joinLeft('table1', '`table2`.`table1.id` = `table1.id`.`table2.table1_id`') 
->setIntegrityCheck(false); 

mais j'ai obtenu le résultat que je recevrais de la jointure interne. Confirme-moi s'il te plaît.

et je voudrais aussi savoir comment construire requête suivante dans le modèle

update table1 set field1 = 'somevalue' where id > someinteger. 

concernant

+1

Vous pouvez déboguer vos requêtes comme suit: die ((string) $ select); –

Répondre

2

Pour la requête de sélection:

// select(false) because you need to declare an identifier for table 1 
// 't1' => $this->_name is better if this function is in the DbTable model 
// setIntegrityCheck(false) because you need to join tables - you did this correctly 
// joinLeft() arguments: array(table2id => table2_name), 
// 'table2id.field = table1id.field', array(table2id.field as newfieldname) 

$select = $this->select(false) 
       ->from(array('t1' => 'table1')) 
       ->setIntegrityCheck(false) 
       ->joinLeft(
        array('t2' => 'table2'), 
        't2.table1_id = t1.id', 
        array('t2.field2 as newfield') 
       ); 

Pour la requête de mise à jour (dans le DbTable modèle):

$data = array('field1' => 'somevalue'); 
$where = 'id > someinteger'; 
$this->update($data, $where); 

EDIT: mise à jour et Increment champs dans plusieurs lignes

Dans SQL, vous feriez quelque chose comme ce qui suit:

UPDATE table_name SET field_name = field_name + x WHERE field_name < 5 

Ainsi, en utilisant le code I énuméré ci-dessus pour la mise à jour, vous ferait ce qui suit dans ZF:

$this->update(array('field_name' => 'field_name + x') , 'field_name < 5'); 

où bien sûr x est la valeur par laquelle vous souhaitez tout incrémenter.

+0

Ankit si je dois incrémenter la valeur field1 de 2 (je veux dire qu'ils ont tous des valeurs différentes et tous incrémentés de deux) alors ça va marcher? –

+0

J'ai modifié mon post ci-dessus pour répondre à la question avec des tags CODE. –

+0

thnak vous un kit. et désolé d'avoir répondu en retard. –