Zend_db & Zend_paginator - не весело проводить время - PullRequest
0 голосов
/ 11 июня 2009

У меня возникла серьезная проблема с преобразованием моего оператора "select" во что-то, что будет работать с Zend Paginator ... Может ли кто-то с этим справиться, поскольку мне не повезло ...

Вот мой запрос:

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

Вот что у меня есть:

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

Ответы [ 3 ]

1 голос
/ 12 июня 2009

Какое это имеет отношение к Zend_Paginator? Ах, у вас есть запрос, и вы не знаете, как сделать с ним нумератор страниц, или же он не работает с этим запросом?

Единственное, что я вижу, это то, что вы пропускаете открывающую скобку в предложениях where() и order():

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

Так, может, Zend_Paginator не работает, потому что в запросе SQL есть ошибки?

И, конечно, я должен спросить: те переменные, которые вы интерполируете, безопасны, или вы действительно должны использовать $db->quote($user->latitude, Zend_Db::FLOAT_TYPE)?

1 голос
/ 11 июня 2009

Почему у вас есть "<" в вашем заказе по пункту? </p>

0 голосов
/ 12 июня 2009

Если вы используете MVC-шаблон, это не сработает?

в вашей начальной загрузке:

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

в вашем контроллере:

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

по вашему мнению:

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

затем поместите пример pagination.phtml, который вы можете найти в руководстве по Zend -Lo

...