问题描述
|
假设我有一张桌子:学生
______________________________________________________
|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 |
_______________________________________________________
使用此查询:
SELECT a.class,GROUP_CONCAT(a.name) as names FROM students a WHERE a.school=\'ABC\' GROUP BY a.class
给我这个结果:
____________________________
|class | names |
____________________________
| C1 | John,Jack,Anna |
| C2 | Alex,Bryan,David|
____________________________
如何使用Zend_Db_Table或Zend_Db_Select在Zend Framework中执行此查询?
非常感谢!
解决方法
我想会是这样。尝试一下。
$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\');
当我组装它时,它给了我以下查询:
SELECT `a`.`class`,GROUP_CONCAT(a.name) AS `names` FROM `students` AS `a`
WHERE (a.school = \'ABC\')
GROUP BY `a`.`class`
是您要找的东西吗?
, Zend Expression给我带来了问题,对我来说最简单的方法是:
$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\'))
在这里,我将连接类别名称和ID的列表,这些列表将在搜索结果中爆炸并为每个父记录打印可单击的子类别列表。
您显然可以向from()添加更多的Joins和其他条件,因为上述内容将被视为子查询。