2010-11-15 5 views
1

i ont la partie de code suivant dans une de mes classes:Build SQL Sélectionnez une meilleure solution? (Oracle)

   $l = new Location(); 
       $result = $l->getLocIdsbyCity($city); // returns csv 
       $ids = explode(',', $result); 

       $where = 'LOC_ID = ' . $ids[0]; 
       unset($ids[0]); 

       foreach ($ids as $id) { 
        $where .= ' OR LOC_ID = ' . $id; 
       } 

       $select->where($where); 

est-il une façon plus « élégante » pour construire la sélection stmt? Je dois tous les dossiers avec l'un des fournis ids ..

+0

'MySQL' ou' Oracle'? – Quassnoi

+0

Oracle mais "WHERE IN()" Fonctionne bien – opHASnoNAME

Répondre

1

En supposant que votre csv est piquerie (contient des valeurs de confiance et aucune entrée fournie par l'utilisateur):

  $l = new Location(); 
      $result = $l->getLocIdsbyCity($city); // returns csv 
      $where = "LOC_ID IN ($result)"; 
      $select->where($where); 

Si ce n'est pas, vous devez exploser, mysql_real_escape_string chaque valeur et implosent en retour.

+1

en fait, il peut également utiliser $ where = 'LOC_ID IN (?)'; $ select-> where ($ où, $ résultat); –

+0

@Tomas: probablement, je ne suis pas un expert dans 'Zend' :) – Quassnoi

0

Vous pouvez utiliser l'opérateur in pour former une condition comme:

where LOC_ID in (1,2,3,4,5) 

Si vous êtes sûr que $result ne peut pas contenir quoi que ce soit dangereux, vous devriez pouvoir l'utiliser directement sans avoir à diviser et boucle.

Questions connexes