Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Ajout d'une méthode findIn à DAOFactory

Posted by galves on 07/06/2006 11:22

Simple proposition, mais ça évite d'avoir à systématiquement définir ces méthodes dans les daos en xml. Ca gère les pkey "multiples".

   public function findIn($pkey_array){
        //Returns all the records with pkeys matching $pkey_array
        $dbw =  new jDbWidget ($this->_conn);
        $q = $this->_selectClause.$this->_fromClause.$this->_whereClause.' WHERE ';
        $swappedArray=array();
        for ($i = 0 ; $i < count($pkey_array);$i++){
                $value=$pkey_array[$i];
                if (is_array($value)){
                        for ($j = 0; $j<count($value);$j++) {
                                $swappedArray[$this->_pkFields[$j]][$i]=$value[$j];
                        }
                } else $swappedArray[$this->_pkFields[0]]=array($value);
        }
        $q_array=array();
        foreach ($swappedArray as $pkeyPieceName => $pkeyPieceValueArray){
                $q_array[]=$this->_primaryTable.'.'.$pkeyPieceName.' IN ('."'".implode("', '",$pkeyPieceValueArray)."'".')';
        }
        $q.=implode(' AND ',$q_array);
 return $dbw->fetchAllInto($q , $this->_DAORecordClassName);
   }

  [Opened] Re: Ajout d'une méthode findIn à DAOFactory

Reply #1 Posted by laurentj on 07/06/2006 11:34

Un peu plus d'explications sur les paramètres en entrée et leur structure, et sur ce que tu veux obtenir serait un plus. Je pense en effet voir quelques erreurs dans ton code, mais peut-être ai-je mal compris...

  [Opened] Re: Ajout d'une méthode findIn à DAOFactory

Reply #2 Posted by galves on 07/07/2006 16:09

ok, c'est complètement faux. en effet, WHERE k1 IN (17, 18, 19, 15) AND k2 IN (17, 12, 13, 14) va renvoyer les éléments ayant les clefs suivantes, s'ils existent:

 17-17, 17-12, 17-13, 17-14, 
 18-17, 18-12, 18-13, 18-14, 

etc.

au lieu de

 17-17, 18-12, 19-13, 15-14

uniquement. Il faudrait écire:

 WHERE (k1=17 and k2=17) or (k1=18 and k2=12) or (k1=19 and k2=13) or (k1=15 and k2=14)

Ce qui n'est pas très beau. Existe t'il en SQL une syntaxe du type:

 WHERE [k1,k2] IN ([17,17],[18,12],[19,13],[15-14])

Sinon je reviens sur des and/or et des égalités en séquence.

Pour info, l'entrée est un tableaux de clefs primaires. Si une clé primaire est composée de plusieurs champs, la clef primaire est un tableau, avec les valeurs dans l'ordre de déclaration des champs.

 
Page
  1. Ajout d'une méthode findIn à DAOFactory