- 1
[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
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
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.
- 1