0

Ok。このバージョンのselectは次のように機能します。

    $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> 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は正しい値の配列にあります。

EDIT2:上記の選択を簡略化しました(重要でない行を削除しました)。

4

1 に答える 1

2

私は特に zend-framework に精通しているわけではありませんが、問題は media_count がテーブルの実際の列ではないことだと思います。交換してみる

media_count > 0

(SELECT COUNT(*) FROM media WHERE user_id = u.id) > 0
于 2010-01-05T21:19:38.947 に答える