帮助在ZF中选择查询

时间:2010-01-05 20:36:47

标签: zend-framework zend-db zend-db-table

确定。此版本的选择有效:

    $select = $this->select();
    $select->setIntegrityCheck(false);
    $select->from(array('u' => $this->_name),
                  array('u.id', 'u.username', 'u.avatar_path',
                        '(SELECT COUNT(*) FROM media WHERE user_id = u.id) media_count'));
    $where = "u.status = 'active' AND u.avatar_path <> 'images/photo-thumb.gif' AND u.show_on_homepage = 1";
    $where .= " AND (u.status_message IS NOT NULL OR u.profile_theme_id IS NOT NULL)";
    $select->where($where);
    return $this->fetchAll($select);

现在我做的是我刚刚在第7行(media_count&gt; 0)添加了一个条件,所以它看起来像这样:

    $select = $this->select();
    $select->setIntegrityCheck(false);
    $select->from(array('u' => $this->_name),
                  array('u.id', 'u.username', 'u.avatar_path',
                        '(SELECT COUNT(*) FROM media WHERE user_id = u.id) media_count'));
    $where = "u.status = 'active' AND u.avatar_path <> 'images/photo-thumb.gif' AND u.show_on_homepage = 1";
    $where .= " AND (u.status_message IS NOT NULL OR u.profile_theme_id IS NOT NULL OR media_count > 0)";
    $select->where($where);
    return $this->fetchAll($select);

这已经不起作用了,我收到了一个错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'm.media_count' in 'where clause'

当我删除它的条件时,它的工作原理。我也试过使用u.media_count但没有成功。

编辑:media_count值有效。我遗漏了条件(media_count&gt; 0)然后我在结果集上做了var_dump,关键的media_count在数组中的值正确。

EDIT2:我简化了上面的选择(我删除了不重要的行)。

1 个答案:

答案 0 :(得分:2)

我并不是特别熟悉zend-framework,但我认为问题在于media_count不是表的实际列。尝试替换

media_count > 0

(SELECT COUNT(*) FROM media WHERE user_id = u.id) > 0