Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-07-2010 10:38:12

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Comment ne pas prendre en compte certaines lignes lors d'une jointure

Bonjour,

Dans mon appli, je peux faire une recherche sur des Items et des Users.
Une table attribution stock les attributions.

ITEM
item_id
etc..

USER
user_id
etc..

ATTRIBUTION
att_item_fk
att_user_fk
att_dateBegin
att_dateEnd

A noté que dateEnd est à null lorsque l'attribution est en cours, sinon il y a une date.
De plus la table Attribution stoque l'historique donc il y a des lignes qui ont la même att_item_fk ou att_user_fk.


Le problème est le suivant :

Lors d'une recherche j'ai besoin que les lignes venant de la table attribution n'apparaissent pas.
Car je peux faire une recherche avec plusieurs termes, et il y a un travail sur les résultats après.


Exemple :

Un item : ID = 1005
Un user : ID = 569
Un User : ID = 77
Dans la table attribution :
Att_item_fk      att_user_fk      att_dateBegin     att_dateEnd
1005                  569                     09/06/2010         10/07/2010
1005                  77                       10/07/2010          NULL

Si je fais une recherche sur un attribut de l’Item 1005, alors les deux lignes me serons retournés
C’est ce que je ne veux pas.       




Ma requête est la suivante :

Code:

    public function search($word)
    {
        $query = $this->select()->setIntegrityCheck(false)
                ->from(array('i'=>'item'))         
                ->join(array('a' => 'attribution'), 'a.attribut_item_fk = i.item_id')
            ->join(array('u' => 'user'), 'u.user_id = a.attribut_user_fk')  
                ->orWhere("item_price LIKE '%$word%'")            
                ->orWhere("item_serialNumber LIKE '%$word%'")   
                ->orWhere("user_username LIKE '%$word%'");
        return $this->fetchAll($query);
    }

Comment éliminer les ligner résultantes de la table Attribution ?
Merci

Dernière modification par maryooman (12-07-2010 10:46:05)

Hors ligne

 

#2 12-07-2010 10:57:17

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Comment ne pas prendre en compte certaines lignes lors d'une jointure

si tu nous dis pas quelle ligne tu ne veux pas je ne vois pas comment on peut t'aider
par exemple

Code:

Att_item_fk  att_user_fk  att_dateBegin  att_dateEnd
1005         569          09/06/2010     10/07/2010
1005         77           10/07/2010     NULL

min att_user_fk, max att_user_fk ?
min att_dateBegin, max att_dateBegin, att_dateBegin IS NULL

il suffit de mettre un where dans ta requête mais
impossible de dire lequel

on peut aussi mettre des condition dans les jointures
par exemple

Code:

  public function search($word)
  {
    $query = $this->select()->setIntegrityCheck(false)
      ->from(array('i'=>'item'))
      ->join(array('a' => 'attribution'),
        'a.attribut_item_fk = i.item_id AND att_dateEnd is not NULL'
      )
      ->join(array('u' => 'user'), 'u.user_id = a.attribut_user_fk')
      ->orWhere("item_price LIKE '%$word%'")
      ->orWhere("item_serialNumber LIKE '%$word%'")
      ->orWhere("user_username LIKE '%$word%'");
    return $this->fetchAll($query);
  }

A+JYT

Dernière modification par sekaijin (12-07-2010 10:58:18)

Hors ligne

 

#3 12-07-2010 12:38:46

maryooman
Membre
Date d'inscription: 15-02-2010
Messages: 106

Re: Comment ne pas prendre en compte certaines lignes lors d'une jointure

Bonjour sekaijin


J'étais en train de rédiger un message d'une trentaine de lignes quand j'ai pensé à faire quelque chose que tu m'a montré.

J'ai mis une condition dans une jointure ! (fallait trouvé la bonne)


Je ne rentre pas plus dans les détails, je te remercie énormément !!

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages