2009-12-19 9 views
3

J'utilise le code zend suivant pour sélectionner toutes les données d'une table où vérifié = 1 et cela fonctionne pour moi.Zend: Comment utiliser 'pas égal à' dans la clause WHERE?

$table = $this->getDbTable(); 
$select = $table->select(); 
$select->where('verified = 1'); 
$rows = $table->fetchAll($select); 

Non Je veux sélectionner toutes les données de cette table où la valeur vérifiée n'est pas égale à '1'. J'ai essayé les manières suivantes mais il ne cherche pas des données.

$select->where('verified != 1'); 
$select->where('verified <> 1'); 
$select->where('verified != ?', 1); 

structure de données pour la colonne 'vérifié':

Field: verified 
type: varchar(45) 
Collation: utf8_bin   
NULL: Yes 
Default: NULL 

Toute idée que l'utilisation de l'opérateur 'ne correspond pas à' dans la clause WHERE dans Zend? Merci

+0

Avez-vous des données dans votre base de données où vérifié? = 1? – Yacoby

+0

Oui. Il y a beaucoup de valeurs NULL, 0 et 1 dans la colonne vérifiée. – NAVEED

+0

Exemple testé ajouté à ansver. et les valeurs NULL sont des colonnes spéciales. ils peuvent être vérifiés uniquement par IS NULL/IS NOT NULL – SMka

Répondre

4

MySQL prend en charge un opérateur personnalisé <=> qui retourne true si les opérandes sont égaux ou tous deux nuls. Il renvoie false s'ils sont différents, ou si un opérande est null.

$select->where('verified <=> 1'); 

Cet opérateur est non standard. SQL standard a la syntaxe: IS NOT DISTINCT FROM qui fonctionne exactement comme <=> de MySQL.

5
$select->where('verified != ?', 1); 

réel worls exemple de requête:

$query = $this->getDb()->select(); 
    $query->from('title', array('title_id' => 'id', 'title', 'production_year', 'phonetic_code')) 
      ->where('kind_id = 1') 
      ->where('title = ?', trim($title)) 
      ->where('production_year != ?', '2009') 
      ->limit(1) 
      ; 

Sélectionne info films de la base de données IMDB. Fonctionne bien. Pouvez-vous nous montrer la structure de table pour la table que vous interrogez?

+0

Cela ne fonctionne pas. Ajouté en question aussi. – NAVEED

1

La colonne vérifie-t-elle un int ou une chaîne? Essayez également d'imprimer l'instruction SQL que ZEND génère, voir la ligne d'écho ci-dessous.

$table = $this->getDbTable(); 
$select = $table->select(); 
$select->where('verified = 1'); 
echo sprintf("sql %s",$select); 
$rows = $table->fetchAll($select); 
+0

La structure db est ajoutée en question pour la colonne vérifiée. – NAVEED

2

Étant donné que votre colonne est un varchar peut-être essayer where verified != '1' or verified is null

0

Essayez:

$select->where('verified != ?', '1'); 

guillemets de vente autour de la valeur. Ça marche pour moi.

Questions connexes