2009-06-11 5 views
0

Je rencontre un problème sérieux en convertissant ma déclaration 'select' en quelque chose qui fonctionnera avec le zend paginator ... quelqu'un pourrait-il avoir une chance, vu que je n'ai pas de chance ...Zend_db & Zend_paginator - Ne pas s'amuser

Voici ma question:

$query = "SELECT 
      user_id, name, gender, city, province, country, image_id, one_liner, self_description, reputation 
      FROM 
      users 
      WHERE 
      (
      (69.1 * (latitude - " . $user->latitude . ")) * 
      (69.1 * (latitude - " . $user->latitude . ")) 
     ) + ( 
      (69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3)) * 
      (69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3)) 
     ) < " . pow($radius, 2) . " 
      ORDER BY 
      (
       (69.1 * (latitude - " . $user->latitude . ")) * 
      (69.1 * (latitude - " . $user->latitude . ")) 
     ) + ( 
      (69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3)) * 
      (69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3)) 

Voici ce que je jusqu'à présent: dans votre commande par clause

 $select = $db->select(); 
     $select->from(
      array('users'), 
       array(
         'user_id', 
         'name', 
         'gender', 
         'city', 
         'province', 
         'country', 
         'image_id', 
         'one_liner', 
         'self_description', 
         'reputation' 
        ) 
     ); 
     $select->where("(69.1 * (latitude - " . $user->latitude . ")) * (69.1 * (latitude - " . $user->latitude . "))) + ((69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3)) * (69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3))) < " . pow($radius, 2)); 
     $select->order("(69.1 * (latitude - " . $user->latitude . ")) * (69.1 * (latitude - " . $user->latitude . "))) + ((69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3)) * (69.1 * (longitude - " . $user->longitude . ") * COS(" . $user->latitude . "/57.3))) ASC"); 
+0

Pouvez-vous décrire les erreurs ou les incohérences que vous rencontrez? Qu'est-ce, spécifiquement, ne fonctionne pas? –

Répondre

1

Pourquoi avez-vous "<"?

+0

retiré, ayant encore des problèmes si – MichaelICE

+0

cette réponse aurait dû être un commentaire ...? –

1

Qu'est-ce que cela a à voir avec Zend_Paginator? Ah, avez-vous la requête et vous ne savez pas comment faire un paginateur avec elle, ou le paginateur ne fonctionne pas avec cette requête?

La seule chose que je peux voir est que vous manquez une parenthèse d'ouverture à la fois la clause where() et order():

$select->where("((69.1 * [...] "); 
$select->order("((69.1 * [...] "); 
       ^

Alors peut-être Zend_Paginator ne fonctionne pas parce que la requête SQL contient des erreurs?

Et bien sûr, je dois demander: sont ces variables que vous interpolez en toute sécurité, ou devriez-vous vraiment utiliser $db->quote($user->latitude, Zend_Db::FLOAT_TYPE)?

0

En supposant que vous utilisez MVC-pattern, cela ne fonctionnera-t-il pas?

dans votre bootstrap:

Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml'); 

dans votre contrôleur:

$page = Zend_Paginator::factory($select); 
$page->setCurrentPageNumber($this->_getParam('page', 1)); 
$page->setItemCountPerPage($this->_getParam('par', 20)); 
$this->view->results= $page; 

à votre avis:

<?php foreach($this->results as $result) : ?> 
    <!-- print some $result stuff here --> 
<?php endforeach;?> 
<?= $this->results ?> 

puis placez un exemple pagination.phtml que vous pouvez trouver sur zend manuel -Lo