Помощь с выбором запроса в ZF - PullRequest
0 голосов
/ 05 января 2010

Хорошо. Эта версия избранных работ:

    $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);

Теперь я добавил одно условие в седьмой строке (media_count> 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> 0) и затем сделал var_dump для набора результатов, и ключ media_count находится в массиве с правильным значением.

РЕДАКТИРОВАТЬ 2: Я упростил выбор выше (я удалил неважные строки).

1 Ответ

2 голосов
/ 06 января 2010

Я не очень знаком с Zend-Framework, но я думаю, что проблема в том, что media_count не является фактическим столбцом таблицы. Попробуйте заменить

media_count > 0

с

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