Mysql
 sql >> Database >  >> RDS >> Mysql

Posso impaginare una query personalizzata senza sovrascrivere l'impaginazione predefinita?

In realtà se PUOI farlo con find puoi farlo con paginate. Puoi dare un'occhiata qui

Ma per essere più precisi puoi aggiungere le condizioni/limite/campi/contenitore/ordine ecc. che usi in trova alla funzione di impaginazione.

Non ho usato il gruppo nella pagina ma DOVREBBE funzionare:D

Nel tuo caso avrai qualcosa del genere:

$this->paginate = array(
   'fields' => array(
        'Product.category_id',
        'COUNT(Product.hotel_id) as total'
    ),
   'group' => array(
        'Product.category_id HAVING COUNT(Product.hotel_id) > 1')
    )
);

$data = $this->paginate('Product');

Spero che funzioni, pubblica un commento sul tuo risultato, se non funziona dovrai sovrascriverlo, perché non accetta la condizione del gruppo ... anche se penso che funzionerà poiché l'impaginazione è una scoperta alla fine.

MODIFICA:

Puoi provare a fare qualcosa del genere:

Sovrascrivi paginate() e paginateCount() ma con un tweak, nasconde una condizione in modo da poter dire se è una paginazione con avere o meno. Qualcosa del genere:

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()){
   //if no having conditions set return the parent paginate 
   if (empty($conditions['having'])
       return parent::paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra)
   //if having conditions set return your override

//override code here

}

Quindi fai qualcosa di simile in paginateCount(), in questo modo hai una paginazione selettiva. ricordati di annullare le $condizioni['avendo'] una volta che non è necessario o ricorda di metterlo da qualche parte che non influisca sulla tua ricerca;)