2010-01-05 22 views
0

Ok. Cette version de travaux de sélection:Aide Avec requête Sélection dans ZF

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

Maintenant, ce que je faisais était que je viens d'ajouter une seule condition sur la ligne 7 (media_count> 0) il ressemble à ceci:

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

Et cela déjà doesn ne fonctionne pas et j'obtiens une erreur:

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

Lorsque je supprime la condition, cela fonctionne. J'ai aussi essayé d'utiliser u.media_count sans succès.

EDIT: Les travaux de valeur media_count. Je l'ai laissé à la condition (media_count> 0), puis je l'ai fait var_dump sur le jeu de résultats et la media_count clé est dans le tableau avec la valeur correcte.

EDIT2: J'ai simplifié les sélections ci-dessus (j'ai enlevé des lignes sans importance).

Répondre

2

Je ne suis pas particulièrement familier avec le zend-cadre, mais je pense que le problème est que media_count n'est pas une colonne réelle de la table. Essayez de remplacer

media_count > 0 

avec

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

Merci. Mais je pensais que les requêtes de sous-sélection ajoutaient des colonnes au jeu de résultats? C'est étrange. –