web-dev-qa-db-fra.com

Ajout de l'instruction where à la requête de base de données

Je dois modifier la requête de base de données pour ne pas sélectionner un certain identifiant dans la base de données afin que les éléments portant cet identifiant n'apparaissent pas dans les résultats. Cependant, je ne peux pas comprendre comment faire cela. ci-dessous, j'ai ajouté une instruction WHERE mais je ne sais pas si c'est la bonne façon de faire ceci ou si elle est même créée correctement.

-> où ('geo.fid'! = 887)

Toute aide serait très appréciée.

protected function loadEntries( &$data, $conditions )
    {
        $db = SPFactory::db();
        $table = $db->join( array(
                array( 'table' => 'spdb_field_geo', 'as' => 'geo', 'key' => 'sid' ),
                array( 'table' => 'spdb_object', 'as' => 'spo', 'key' => 'id' )
        ) );
        if ( Sobi::My( 'id' ) ) {
            $this->userPermissionsQuery( $conditions, 'spo.' );
        }
        else {
            $conditions = array_merge( $conditions, array( 'spo.state' => '1', '@VALID' => $db->valid( 'spo.validUntil', 'spo.validSince' ) ) );
        }
        $data[ 'entries' ] = SPFactory::db()
                ->select( array( 'geo.sid', 'geo.latitude', 'geo.longitude' ), $table, $conditions )

                ->where ('geo.fid' != 887) // this is what I am trying to add but it breaks the code.

                ->loadAssocList();
        Sobi::Trigger( 'SPGeoMap', 'AfterGetEntries', array( &$data[ 'entries' ] ) );
        $data[ 'count' ] = count( $data[ 'entries' ] );
    }
4
user1701282

Basé sur cette partie du code de https://github.com/Sigsiu-NET/SobiPro/blob/master/Site/lib/base/config.php :

enter image description here

Je recommanderai cette solution possible:

if (Sobi::My('id')) {
    $this->userPermissionsQuery($conditions, 'spo.');
} else {
    $conditions = array_merge($conditions, array('spo.state' => '1', '@VALID' => $db->valid('spo.validUntil', 'spo.validSince')));
}
$conditions = array_merge($conditions, array('!geo.fid' => '887'));

$data['entries'] = SPFactory::db()
         ->select(array('geo.sid', 'geo.latitude', 'geo.longitude'), $table, $conditions)
         ->loadAssocList();

Il semble que les valeurs numériques que vous utilisiez auparavant soient entourées de guillemets simples, mais l'extrait de code source ne s'embarrasse pas de citer des valeurs entières - vous pouvez donc laisser la valeur sans guillemets.

Je dis tout cela sans aucune expérience personnelle de ce produit; Je ne fais que vous rejoindre dans cette quête de recherche. Faites-nous savoir comment cela se passe.

0
mickmackusa

Vous devez vous assurer que != est enveloppé dans les guillemets. Également échapper le nom de la colonne, comme suit:

->where($db->quoteName('geo.fid') . ' != 887');
0
Lodder