0

'select'ステートメントをzendpaginatorで機能するものに変換するのに深刻な問題があります...運がないので、誰かがそれにひびを入れる可能性があります...

これが私の質問です:

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

3 に答える 3

1

orderby句に「<」が含まれているのはなぜですか。

于 2009-06-11T19:41:09.453 に答える
1

これはZend_Paginatorと何の関係がありますか?ああ、あなたはクエリを持っていて、それを使ってページネーターを作成する方法がわかりませんか、それともページネーターがこのクエリで機能していませんか?

where()私が見ることができる唯一のことは、 andorder()句の両方に開き括弧がないことです。

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

では、SQLクエリにエラーがあるため、Zend_Paginatorが機能していない可能性がありますか?

そしてもちろん、私は尋ねなければなりません:あなたが補間しているそれらの変数は安全ですか、それともあなたは本当に使用すべきです$db->quote($user->latitude, Zend_Db::FLOAT_TYPE)か?

于 2009-06-11T20:10:45.450 に答える
0

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 ?>

次に、zendmanual-Loにあるpagination.phtmlの例を配置します。

于 2009-06-11T20:15:42.630 に答える