2009-06-11 7 views
0

Ich habe ein ernsthaftes Problem damit, meine 'Select'-Anweisung in etwas umzuwandeln, das mit dem Zend Paginator funktioniert ... könnte jemand einen Fehler machen, da ich kein Glück habe ...Zend_db & Zend_paginator - Keine spaßige Zeit

Hier ist meine Frage:

$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)) 

Hier ist, was habe ich bisher:

 $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

Können Sie die aufgetretenen Fehler oder Inkonsistenzen beschreiben? Was speziell funktioniert nicht? –

Antwort

1

Warum Sie in Ihrem Auftrag durch Klausel "<" haben?

+0

entfernt es, immer noch probs obwohl – MichaelICE

+0

diese Antwort sollte ein Kommentar sein ...? –

1

Was hat das mit Zend_Paginator zu tun? Ah, haben Sie die Abfrage und Sie wissen nicht, wie man einen Paginator damit macht, oder arbeitet der Paginator nicht mit dieser Abfrage?

Das einzige, was ich sehen kann, ist Ihnen fehlt eine öffnende Klammer sowohl in der where() und order() Klausel:

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

Vielleicht Zend_Paginator funktioniert nicht, weil die SQL-Abfrage-Fehler hat?

Und natürlich muss ich fragen: Sind diese Variablen interpolierend sicher, oder sollten Sie wirklich $db->quote($user->latitude, Zend_Db::FLOAT_TYPE) verwenden?

0

Angenommen, Sie verwenden MVC-Muster, wird das nicht funktionieren?

in der Bootstrap:

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

in Ihrem Controller:

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

Ihrer Ansicht:

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

dann ein pagination.phtml Beispiel platzieren, die Sie auf zend finden Handbuch -Lo

Verwandte Themen