2011-06-13 15 views
6

Supongamos que tengo una tabla: estudiantesCómo usar GROUP_CONCAT con Zend Framework?

______________________________________________________ 
|id | name   | school  | class  | 
______________________________________________________ 
| 1 | John   | ABC   | C1   | 
| 2 | Jack   | ABC   | C1   | 
| 3 | Anna   | ABC   | C1   | 
| 4 | Peter   | DEF   | D1   | 
| 5 | Alex   | ABC   | C2   | 
| 6 | Bryan   | ABC   | C2   | 
| 7 | David   | ABC   | C2   | 
| 8 | Cristian  | DEF   | D1   | 
_______________________________________________________ 

El uso de esta consulta:

SELECT a.class,GROUP_CONCAT(a.name) as names FROM students a WHERE a.school='ABC' GROUP BY a.class 

me da este resultado:

____________________________ 
|class | names    | 
____________________________ 
| C1 | John, Jack, Anna | 
| C2 | Alex, Bryan, David| 
____________________________ 

¿Cómo puedo ejecutar esta consulta en Zend Framework por usando Zend_Db_Table o Zend_Db_Select? ¡Muchas gracias!

Respuesta

12

Supongo que será algo como esto. Intentalo.

$table = Your_DbTable_Class(); 
$select = $table->select() 
      ->setIntegrityCheck(false) 
      ->from(array('a' => 'students'), array('class' => 'class' , 'names' => new Zend_Db_Expr('GROUP_CONCAT(a.name)'))) 
      ->where('a.school = ?', 'ABC') 
      ->group('a.class'); 

Cuando montarlo, me da siguiente consulta:

SELECT `a`.`class`, GROUP_CONCAT(a.name) AS `names` FROM `students` AS `a` 
WHERE (a.school = 'ABC') 
GROUP BY `a`.`class` 

Es lo que está buscando?

+0

Gracias por su respuesta rápida. Voy a intentar eso. –

0

Zend Expresión me dio problemas, la forma más fácil para mí fue:

$select->from($this, 
    array(
     'listings.*', 
     '(SELECT GROUP_CONCAT(DISTINCT ecg.listing_cat_name,"*|*",ecg.listing_cat_id SEPARATOR "-|-") FROM listings_cats AS ecg 
LEFT JOIN listings_to_listings_cats ON listings_to_listings_cats.listing_cat_id=ecg.listing_cat_id 
WHERE listings_to_listings_cats.listing_id=listings.listing_id 
LIMIT 7) AS catGrouping')) 

Aquí estoy concatenando una lista de los nombres de las categorías y las identificaciones, que estallo en mis resultados de búsqueda e imprimir una lista de hacer clic categorías de niños por registro principal. Obviamente, puede agregar otras combinaciones y otras condiciones a la de() ya que lo anterior se tratará como una sub consulta.