Ho cercato di creare una query sql con ZendFW, ma non riesco a farlo funzionare come voglio (o funzionare affatto). Questa è la domanda che opere che io sto cercando di costruire con Zend_Db selezionare()Zend_Db subquery
SELECT tc.trip_title, td.ID, td.trip_id,
(SELECT count(*) FROM 'trips_invites' ti
WHERE ti.destination_id=td.ID AND ti.accepted ='NR') AS "pending_invites"
FROM `trips_current` AS `tc`, `trips_data` AS `td`
WHERE (tc.ID=td.trip_id) AND (tc.creator_id = '1')
ORDER BY `trip_id` ASC
Quello che non riesco a capire è come ottenere correttamente che subquery in là, e nulla provo sembra funzionare.
Qualsiasi aiuto sarebbe molto apprezzato!
Grazie!
Modifica/Risposta: Se qualcuno avrà mai un problema simile, basata su suggerimento di seguito ho ri-lavorato dalla query nel seguente modo:
SELECT `tc`.`trip_title`, `td`.`ID`, `td`.`trip_id`, count(TI.ID)
FROM `trips_current` AS `tc`
INNER JOIN `trips_data` AS `td` ON td.trip_id = tc.ID
LEFT JOIN trips_invites AS TI ON ti.destination_id = td.id
WHERE tc.creator_id = 1 AND ti.accepted='NR'
GROUP BY td.id
ORDER BY `trip_id` ASC
che usando ZendFW ho creato in questo modo:
$select = $this->dblink->select()
->from(array('tc' => 'trips_current'),
array('trip_title'))
->join(array('td' => 'trips_data'),
'td.trip_id = tc.id',
array('ID','trip_id'))
->joinLeft(array('ti'=>'trips_invites'),
'ti.destination_id = td.id',
array('COUNT(ti.id)'))
->where('tc.creator_id =?',1)
->group('td.id')
->order('trip_id');
Grazie per il feedback, e sto usando MySQL, ma sfortunatamente questo non produce il risultato che sto cercando. Devo dire che non tutti gli ID di td.ID hanno un ti.destination_id associato, e penso che sia per questo che sto meglio usando una sottoquery. Qualche idea? – user387302
Grazie mille! Ho ancora avuto un problema con la sottoquery poichè sembrava generare la query giusta ma è stata delimitata dal Zend_Db_Select (anche quando ho provato a usare Zend_Db_Expr). Quindi ho rinunciato a questo. Ma grazie al tuo suggerimento, ho rielaborato la mia query per utilizzare leftjoin/groupby per evitare la necessità della subquery. Grazie mille! Ho ancora altre parti della query che dipendono dalla logica dell'applicazione ed è per questo che volevo usare zend_db_select per cominciare. – user387302
questo ha funzionato perfettamente per me. qui "' array ("trip_title", "($ subquery)")) 'Ho aggiunto' array ("trip_title", "($ subquery) come sottoquery")) 'in modo che non si veda il risultato solo – Patrioticcow