2010-11-17 8 views
1

je les suivantes sélectionnez:MySQL choisit (Zend Framework DB Select)

public function fetchFooSum($id) 
    { 
     $db = Zend_Registry::get('dbAdapter'); 
     $select = $db->query("SELECT SUM(prod) FROM `output` WHERE loc_id IN (SELECT loc_id FROM `locations` WHERE location_id = ".$id.");"); 

     return $select->fetchAll(); 
    } 

J'ai 2 questions à ce sujet:

  1. Est-ce considéré comme un moyen raisonnablement acceptable pour former une telle requête ?

    SELECT SUM(prod) FROM output WHERE loc_id IN (SELECT loc_id FROM locations WHERE location_id = ".$id."); 
    

    ou est-ce pas idéal (devrais-je utiliser une autre façon de le faire ... une jointure ou d'une union ou une chose somesuch que je l'ai entendu parler mais je ne suis pas clair quand utiliser) ..

  2. Dans Zend Framework, comment formuleriez-vous une telle requête?

La méthode que je me sers des œuvres, mais je doute qu'il est le moyen idéal de le faire (à la fois comme une requête SQL régulière et la façon dont je le fais au sein de Zend Framework).

Tout conseil sur la requête ou comment mieux l'implémenter dans ZF est apprécié.

Répondre

1

Je préférerais une jointure interne à l'aide de l'opérateur IN pour cette requête que je crois il devancera votre requête dans sa forme actuelle (mais ne sont pas encore une référence à pourquoi :)

// example using Zend_Db_Select 
$select = $db->select() 
      ->from('output', array('sum(prod)')) 
      ->join('locations', 'output.loc_id = locations.loc_id', array()) 
      ->where('locations.location_id = ?', $id); 

// to dump query 
print_r($select->__toString()); 

// to execute 
$result = $db->fetchOne($select); 

Je vous recommande fortement de lire la documentation Zend_Db_Select qui a beaucoup d'exemples pratiques - et ne devrait pas prendre plus d'une heure.

1

Votre code est pas trop mauvais.

$sum = $db->fetchOne(<<<SQL 
    SELECT SUM(prod) 
    FROM `output` 
    WHERE loc_id IN (
     SELECT loc_id 
     FROM `locations` 
     WHERE location_id = {$db->quote($id)} 
    ); 
SQL 
);